一致性Hash 是为了解决动态缓存节点映射问题的

一致性hash的要求:

  • 平衡性:数据分配要均匀

  • 单调性:原有的数据只能映射到其所在的缓冲区或者新的缓冲区,而非其他旧缓冲区。

  • 分散性:同样的内容映射到相同的缓冲区,而非相同的内容映射到不同的缓冲区。

  • 负载:降低缓冲的负荷。

旧的Hash映射算法

hash(object)%N,object表示数据,N表示节点数量。

一致性Hash的实现:环形Hash

思想:在动态增加/删除节点时,只迁移小部分数据,完成新的映射关系。

  • 将key的Hash值映射到2的32次方的空间中,并将所有缓冲节点也映射到这个空间中,通过顺时针计算把数据分配到对应的节点中。

  • 当增加或删除节点时,只需再次按照顺时针计算把相关的数据迁移到对应的节点即可,保证最低迁移量。

  • 为了解决平衡性,把数据尽量平均分配到各个节点,可以把实际节点映射为多个虚拟节点,使节点比较平均的分布。比如把一个节点的IP地址后增加『#1』『#2』作为key值做Hash计算后映射到空间中。


原文地址:五分钟理解一致性哈希算法(consistent hashing)


我有切糕
863 声望45 粉丝

Java架构师,技术经理


引用和评论

0 条评论