哈希算法和一致性hash算法

1、哈希算法

在分布式的环境下,我们搭建了一个redis集群,假如有n台机器,每次来的请求,经过hash运算,pos = key % n,pos就是对应的访问机器。
但是在分布式场景下,如果一台机器挂了,那么机器数量就发生了变化,之前的数据就要重新进行hash计算位置并转移,这样就导致了一个比较大的性能开销。所以后面引入了一种算法,叫做一致性hash算法。

2、一致性hash算法

在分布式环境下,来降低元素位置的集群服务受机器数量的影响。

2.1 实现原理:

避免使用固定值取模进行定位,改为范围定位。
[0, 2^32 - 1]
哈希算法和一致性hash算法_第1张图片
根据ip地址继续hash运算,得到一个位置,在该位置,按照顺时针进行寻找第一个遇到的结点,就是我们存放数据的位置。

2.2 存在的问题和解决方案:

当redis结点比较少时,可能出现负载不平衡的情况,引入虚拟节点进行解决,从而保证数据节点均衡。

“虚拟节点”就是真实节点的复制品,一个真实的节点对应多个“虚拟节点”,这样使得我们的节点能尽可能的在环形Hash空间均匀分布,这样我们再根据虚拟节点找到真实节点,从而保证每个真实节点上分配到的请求是均衡的。

你可能感兴趣的:(哈希算法,算法,redis)