网络上有很多关于一致性散列的信息,以及多种可用语言的实现。该主题的维基百科条目引用了另一个具有相同目标的算法:
Rendezvous Hashing
这个算法看起来更简单,不需要在环周围添加副本/虚拟机来处理负载不均匀的问题。正如文章所提到的,它似乎在 O(n) 中运行,这对于大 n 来说是一个问题,但引用了一篇论文,指出它可以被构建为在 O(log n) 中运行。
我对在这方面有经验的人的问题是,为什么要选择一致散列而不是 HRW,或者相反?是否存在这些解决方案之一是更好选择的用例?
非常感谢。
最佳答案
首先,我会说一致性哈希的优势在于热点。根据实现,可以手动修改 token 范围来处理它们。
使用 HRW,如果您以某种方式最终出现热点(即由糟糕的散列算法选择引起),除了删除热点并添加一个新的热点来平衡请求之外,您无能为力。
HRW 的一大优势是当您添加或删除节点时,您可以在所有内容中保持均匀分布。通过一致的散列,他们通过为每个节点提供 200 个左右的虚拟节点来解决这个问题,这也使得手动管理范围变得困难。
关于load-balancing - 一致散列与集合(HRW)散列 - 有什么权衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790898/