第五章 设计一致性哈希
第五章 设计一致性哈希
一致性哈希是在水平分布的服务器上高效、均匀分配数据和请求的技术。分为以下内容:
一致性散列是什么
为什么需要一致性散列
一致性散列如何工作
一致性哈希的特殊性
传统哈希在分配数据的时候,往往使用模运算来完成分配。在模数发生变化的时候,对应的键到服务器的映射需要重新分配。而一致性散列是在该情况下平均只需重新映射k/n个键的特殊散列,其中k是键的个数,n是槽的个数。
哈希空间和哈希环
一致性哈希的基础是特殊的哈希空间,即哈希环。传统的哈希空间可以表示为线性排列的有限个槽位,数据通过有限范围输出的哈希函数来确定数据对应在哈希空间的位置。
将哈希空间的两端连接起来,就得到了环状的特殊的哈希空间,即哈希环。可以通过相同的哈希函数对服务器或数据确定其在哈希环上的位置。
对于密匙的存储位置,我们可以从环上密匙位置顺时针找到的第一个服务器作为存储服务器。如果模数增加,即添加了新的服务器,只有一小段的数据需要重新分配。
基本方法中的两个问题
基本问题
- 由于存在服务器的添加和删除,不可能给每个服务器分配到相同的环区域
- 环上密匙的分配可能并不均匀
解决方案
每个服务器在环上用多个虚拟节点表示,例如带有标签0的虚拟节点都代表服务器0。每个密匙的存储位置由其在环上位置开始顺时针找到的第一个虚拟节点的归属决定。
随着虚拟节点的增加,节点分布的标准差会变小,也就有了更平衡的数据分布。有研究表明,100到200个虚拟节点的标准差会使平均值的5%(200)到10%(100)。然而,虚拟节点数量的增多也代表需要更多的空间来存储虚拟节点相关的信息,我们需要权衡虚拟节点的数量来适应整个系统的要求。
如何查找受影响的范围以重新分配键
受影响虚拟节点(服务器)在环上的位置逆时针绕环寻找,直到找到另一个节点(服务器),位于两者之间的密匙需要重新分配。
总结
优点
- 添加删除服务器的时候,最小化重新分配键数量
- 数据更均匀分布帮助横向扩展
- 通过均匀分布数据缓解对特定分片过度访问的热键问题
著名应用
- 亚马逊Dynamo数据库分库组件
- Apache Cassandra 集群中跨集群的数据分区
- Discord 聊天应用程序
- Akamai 内容分发网络
- Maglev 网络负载均衡器
2025年7月14日阅读随笔
浙公网安备 33010602011771号