将密钥是字符串的散列查询分派给多台机器的优雅/可扩展方法是什么?

时间:2018-04-11 01:08:38

标签: networking distributed-computing distributed

我想让它可扩展。假设字母都是小写的。例如,如果我只有两台计算机,则可以将第一个字符在a ~ m内的查询分派到第一台计算机,而n ~ z查询可以分派到第二台计算机。

然而,当第三台机器到来时,为了使查询尽可能地传播,我必须重新计算规则并重新分配存储在前两台机器中的内容。我觉得它可能很乱。例如,更复杂的情况,当我已经拥有26台机器时,当第27台机器出现时我该怎么办?人们通常采取什么措施来实现可扩展性?

1 个答案:

答案 0 :(得分:0)

在DHT中(自行)组织机器以将处理查询的负载分割为对象池的过程称为一致散列(Consistent Hashing): https://en.wikipedia.org/wiki/Consistent_hashing

我认为你的问题没有明确的答案。

首先是平衡问题。 DHT在以下情况下保持平衡:

  • 每个节点的负载是否相似? (负载均衡可能就是您之后的事情)
  • 每个节点负责相似数量的对象? (这是你似乎建议的)
  • (不太可能)每个节点负责相似数量的寻址空间?

我相信你的目标是确保没有任何机器超载。除非对单个对象的查询足以使单个机器饱和,否则如果您正确重新平衡,则不太可能发生这种情况。

如果其中一台机器的负载明显低于另一台机器,则可以使负载较小的机器通过移动它们在环中的位置来接管较高负载机器的某些物体。

另一种重新平衡方式是通过虚拟节点 - 每台机器都可以模拟k台机器。如果其负载较低,则可以增加虚拟节点的数量(并接管更多对象)。如果它的负载很高,它可以删除一些虚拟节点。