https://segmentfault.com/a/11…
节点减少、缩小会导致已有数据映射谬误。(三个节点时,5 会映射到第二个节点上,缩减为 2 个节点时,5 会映射到第一个节点上,此时去第一个节点其实找不到 5)
如果分布式缓存大量生效就会产生缓存雪崩。
指标:尽可能小的扭转已有数据的映射关系,从而缩小数据挪动的开销。解决分布式哈希表动静伸缩的问题。
哈希算法应满足
- 平衡性: 各节点均衡散布,在算法层面做负载平衡
- 枯燥性:新增或删除节点时不影响零碎裕兴
- 分散性:节点只须要保留一部分数据
原理
对象向 2^32- 1 个桶里 hash,放到哈希环上。
把服务器也放到哈希环上。
顺时针找离对象最近的机器。
新增、删除机器时,只有机器左右的对象被影响。
为了让重调配更平衡,减少虚构节点,对象先找到本人属于的虚构节点,再找到虚构节点属于的实在节点。一台实在节点对应大量虚构节点,扩散在环的各处,当减少或删除一台实在节点时,很多台其余节点都会受到轻微的影响。