一致性哈希
1、问题背景
一般分布式缓存数据映射方案,在集群扩缩容的时候,会存在大量缓存失效,数据迁移的问题;如取模算法映射;
2、原理分析
一致性哈希算法的提出,是为了降低节点上下线的过程中带来的数据迁移成本,同时节点数量的变化与分片原则对于应用系统来说也是无感的。
图解一致性哈希算法,看这一篇就够了!
做两次映射:
第一步:对存储节点进行哈希计算,也就是对存储节点做哈希映射,比如根据节点的 IP 地址进行哈希;
第二步:当对数据进行存储或访问时,对数据进行哈希映射;
3、存在问题及解决方案
问题:普通的哈希环,会存在数据倾斜问题:即节点映射在环上分布并不均匀,导致数据堆积在一个节点上,严重会产生雪崩问题;
解决方案:添加虚拟节点,即多个交错的虚拟节点映射到一个真实节点,如Nginx中的一致性哈希算法,一个真实节点映射160个虚拟节点;
方案解释:比如,当某个节点被移除时,对应该节点的多个虚拟节点均会移除,而这些虚拟节点按顺时针方向的下一个虚拟节点,可能会对应不同的真实节点,即这些不同的真实节点共同分担了节点变化导致的压力。