我正在阅读the DynamoDB whitepaper.,其中解释了从哈希函数获得的键如何创建(圆形)范围。然后,逻辑节点负责该范围的连续段。
Dynamo的分区方案依靠一致的哈希来 在多个存储主机之间分配负载。一致的 散列[10],将散列函数的输出范围视为 固定的圆形空间或“环”(即最大的散列值换行 到最小的哈希值)。系统中的每个节点都是 在此空间内分配了一个随机值,代表它的 环上的“位置”。分配由键标识的每个数据项 通过散列数据项的键以将其在节点上的位置 环,然后顺时针旋转环以找到第一个节点 大于物品位置的位置。
但是,在均匀负载分配下,详细介绍了一些策略:
策略1:每个节点T个随机令牌,并按令牌值划分
策略2:每个节点T个随机令牌和相等大小的分区
那么这些令牌(我假设是密钥?)被随机分配到节点上?
那么逻辑节点负责连续范围的密钥或一组随机密钥?
答案 0 :(得分:1)
免责声明:我只是阅读论文,我不是专家。
我了解令牌和密钥都占用密钥空间(即密钥环上的位置),但是它们不是一回事。
Dynamo使用“虚拟节点”的概念。虚拟节点看起来像 系统中的单个节点,但是每个节点可以负责更多 一个虚拟节点。实际上,将新节点添加到 系统中,它在以下位置被分配了多个位置(以下称为“令牌”) 戒指。
因此,在“基本一致的哈希算法”方法中,您将系统中的每个节点随机分配给它在钥匙圈中的位置。因此,每个节点负责键空间中的单个连续范围。如果愿意的话,可以是圆形的楔形。
作者指出,这在访问均匀性方面存在一些问题。因此,他们提出了“一致性哈希算法的变体”。
在替代方案中,每个节点都被赋予一组“令牌”。令牌是虚拟节点。从概念上讲,您可以想象很多小块的密钥空间,这些密钥空间是从整个环中获取的,并分配给节点。或在我的脑海中-圆的周围有很多细小的楔子。
在他们追求的实际方案中,每个虚拟节点(令牌)都是一组连续的密钥。但是,每个实际节点都有多个非连续的虚拟节点。
因此,每个节点都具有许多连续的密钥空间部分,但是这些部分是从整个密钥空间的所有部分中提取的。也不是随机的,也不是连续的!