一致性Hash 是为了解决动态缓存节点映射问题的
一致性hash的要求:
平衡性:数据分配要均匀
单调性:原有的数据只能映射到其所在的缓冲区或者新的缓冲区,而非其他旧缓冲区。
分散性:同样的内容映射到相同的缓冲区,而非相同的内容映射到不同的缓冲区。
负载:降低缓冲的负荷。
旧的Hash映射算法
hash(object)%N,object表示数据,N表示节点数量。
一致性Hash的实现:环形Hash
思想:在动态增加/删除节点时,只迁移小部分数据,完成新的映射关系。
将key的Hash值映射到2的32次方的空间中,并将所有缓冲节点也映射到这个空间中,通过顺时针计算把数据分配到对应的节点中。
当增加或删除节点时,只需再次按照顺时针计算把相关的数据迁移到对应的节点即可,保证最低迁移量。
为了解决平衡性,把数据尽量平均分配到各个节点,可以把实际节点映射为多个虚拟节点,使节点比较平均的分布。比如把一个节点的IP地址后增加『#1』『#2』作为key值做Hash计算后映射到空间中。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。