load-balancing - 一致散列与集合(HRW)散列 - 有什么权衡?

标签 load-balancing consistent-hashing

网络上有很多关于一致性散列的信息,以及多种可用语言的实现。该主题的维基百科条目引用了另一个具有相同目标的算法:

Rendezvous Hashing

这个算法看起来更简单,不需要在环周围添加副本/虚拟机来处理负载不均匀的问题。正如文章所提到的,它似乎在 O(n) 中运行,这对于大 n 来说是一个问题,但引用了一篇论文,指出它可以被构建为在 O(log n) 中运行。

我对在这方面有经验的人的问题是,为什么要选择一致散列而不是 HRW,或者相反?是否存在这些解决方案之一是更好选择的用例?

非常感谢。

最佳答案

首先,我会说一致性哈希的优势在于热点。根据实现,可以手动修改 token 范围来处理它们。

使用 HRW,如果您以某种方式最终出现热点(即由糟糕的散列算法选择引起),除了删除热点并添加一个新的热点来平衡请求之外,您无能为力。

HRW 的一大优势是当您添加或删除节点时,您可以在所有内容中保持均匀分布。通过一致的散列,他们通过为每个节点提供 200 个左右的虚拟节点来解决这个问题,这也使得手动管理范围变得困难。

关于load-balancing - 一致散列与集合(HRW)散列 - 有什么权衡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20790898/

相关文章:

apache - 负载均衡器和 HTTPS 请求转发

hash - 会合与一致散列

apache-kafka - Zookeeper-Kafka 和一致性哈希

load-balancing - 当循环可以均匀地分配流量时,为什么我们需要一致的散列

networking - 网络和负载均衡器如何在 docker swarm 模式下工作?

asp.net - 扩展 ASP.NET session 状态服务器

redirect - SSL 使用 HAproxy 卸载/重定向特定 URL?

ssl - Haproxy ssl 配置 - 安装根证书和中间证书

python - 使用 Python 水平扩展或分片 Python-RQ 或 Redis