一致性哈希

https://segmentfault.com/a/11...
节点增加、减少会导致已有数据映射错误。(三个节点时,5会映射到第二个节点上,缩减为2个节点时,5会映射到第一个节点上,此时去第一个节点其实找不到5)
如果分布式缓存大量失效就会发生缓存雪崩。
目标:尽可能小的改变已有数据的映射关系,从而减少数据移动的开销。解决分布式哈希表动态伸缩的问题。

哈希算法应满足

  • 平衡性:各节点平衡分布,在算法层面做负载均衡
  • 单调性:新增或删除节点时不影响系统裕兴
  • 分散性:节点只需要保存一部分数据

原理

对象向2^32-1个桶里hash,放到哈希环上。
把服务器也放到哈希环上。
顺时针找离对象最近的机器。
新增、删除机器时,只有机器左右的对象被影响。
为了让重分配更均衡,增加虚拟节点,对象先找到自己属于的虚拟节点,再找到虚拟节点属于的真实节点。一台真实节点对应大量虚拟节点,分散在环的各处,当增加或删除一台真实节点时,很多台其他节点都会受到轻微的影响。

你可能感兴趣的:(一致性哈希算法)