前几天了解了一下什么是一致性哈希,一致性哈希的原理如下
原理
1,有一个数值空间,一般选择的是0~2的32次方
2,将这个数值空间当作一个首尾相接的环
3,从一个节点A开始,逆时针查找到上一个节点B,这两个节点之间的数值空间会映射到节点A上
4,为了使数据分布均匀,保持平衡,增加虚拟节点的概念,将一个真实节点分为几个虚拟节点,各个真实节点的虚拟节点随机划分数值空间,映射方法同 3 ,还要增加一步,就是当数值空间映射到虚拟节点时,需再映射到真实节点上,这一步看你自己设计了。
说白了就是讲数值空间和节点之间加一个中间人,都去跟中间人对接,中间人负责接收数据,然后分发数据到节点,当你需要扩展的时候两边不用动,动中间人就行了
一致性哈希的好处
单调性性好
普通的哈希算法,当需要增加或删除节点时,大部分数据都失效,需要重新计算,映射
一致性哈希当删除节点时,只会影响顺时针下的节点,将自己的数值空间给他;当增加节点时,瓜分顺时针下的节点的一部分数值空间。
当增加节点时一致性哈希的已分配的数值空间会单独分配给新的节点,当删除节点时,会将被删除的节点的数值空间完全分配给另一个节点。这就是所谓的单调性
分配数值空间灵活
如果你想让某个节点负责更多的数值空间,你可以给他分更多的虚拟节点