https://segmentfault.com/a/11...
节点增加、减少会导致已有数据映射错误。(三个节点时,5会映射到第二个节点上,缩减为2个节点时,5会映射到第一个节点上,此时去第一个节点其实找不到5)
如果分布式缓存大量失效就会发生缓存雪崩。
目标:尽可能小的改变已有数据的映射关系,从而减少数据移动的开销。解决分布式哈希表动态伸缩的问题。
哈希算法应满足
- 平衡性:各节点平衡分布,在算法层面做负载均衡
- 单调性:新增或删除节点时不影响系统裕兴
- 分散性:节点只需要保存一部分数据
原理
对象向2^32-1个桶里hash,放到哈希环上。
把服务器也放到哈希环上。
顺时针找离对象最近的机器。
新增、删除机器时,只有机器左右的对象被影响。
为了让重分配更均衡,增加虚拟节点,对象先找到自己属于的虚拟节点,再找到虚拟节点属于的真实节点。一台真实节点对应大量虚拟节点,分散在环的各处,当增加或删除一台真实节点时,很多台其他节点都会受到轻微的影响。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。