逻辑节点负责连续范围的密钥还是一组随机密钥

时间:2018-08-11 15:43:58

标签: amazon-dynamodb

我正在阅读the DynamoDB whitepaper.,其中解释了从哈希函数获得的键如何创建(圆形)范围。然后,逻辑节点负责该范围的连续段。

  

Dynamo的分区方案依靠一致的哈希来   在多个存储主机之间分配负载。一致的   散列[10],将散列函数的输出范围视为   固定的圆形空间或“环”(即最大的散列值换行   到最小的哈希值)。系统中的每个节点都是   在此空间内分配了一个随机值,代表它的   环上的“位置”。分配由键标识的每个数据项   通过散列数据项的键以将其在节点上的位置   环,然后顺时针旋转环以找到第一个节点   大于物品位置的位置。

但是,在均匀负载分配下,详细介绍了一些策略:

  

策略1:每个节点T个随机令牌,并按令牌值划分

     

策略2:每个节点T个随机令牌和相等大小的分区

那么这些令牌(我假设是密钥?)被随机分配到节点上?

那么逻辑节点负责连续范围的密钥或一组随机密钥?

1 个答案:

答案 0 :(得分:1)

免责声明:我只是阅读论文,我不是专家。

我了解令牌和密钥都占用密钥空间(即密钥环上的位置),但是它们不是一回事。

  

Dynamo使用“虚拟节点”的概念。虚拟节点看起来像   系统中的单个节点,但是每个节点可以负责更多   一个虚拟节点。实际上,将新节点添加到   系统中,它在以下位置被分配了多个位置(以下称为“令牌”)   戒指。

因此,在“基本一致的哈希算法”方法中,您将系统中的每个节点随机分配给它在钥匙圈中的位置。因此,每个节点负责键空间中的单个连续范围。如果愿意的话,可以是圆形的楔形。

作者指出,这在访问均匀性方面存在一些问题。因此,他们提出了“一致性哈希算法的变体”。

在替代方案中,每个节点都被赋予一组“令牌”。令牌是虚拟节点。从概念上讲,您可以想象很多小块的密钥空间,这些密钥空间是从整个环中获取的,并分配给节点。或在我的脑海中-圆的周围有很多细小的楔子。

在他们追求的实际方案中,每个虚拟节点(令牌)都是一组连续的密钥。但是,每个实际节点都有多个非连续的虚拟节点。

因此,每个节点都具有许多连续的密钥空间部分,但是这些部分是从整个密钥空间的所有部分中提取的。也不是随机的,也不是连续的!