算法_一致性hash算法
分布式缓存的应用场景,了解了这个场景后我们就知道为什么要使用一致性hash算法。
1 分布式缓存
假设我们有3台服务器,分别为S0、S1、S2。
我们有图片需要缓存,图片最好能够均匀的缓存到每台服务器上。
我们实现该功能,对缓存下来的key进行hash计算,hash后的值是一个整数,根据服务器的数量对这个整数进行取模计算,使用取模产生的余数来决定数据应该缓存在哪一台服务器上。
我们将这个过程写成一个公式:hash(名称)%机器数=余数
假设我们有三台机器,那么取模的结果就有三种情况,0、1、2,正好与服务器的编号对应。
对同一个名称进行hash计算,其值是不变的。
hash算法,有一个缺陷,如果此时需要增加一台服务器,缓存服务器的数量就变成了4台,此时余数就会不同,那么此时访问服务器的编号就会改变。
这里由于服务器数量变化,所以导致访问数据的有问题。
2 一致性hash算法的原理。
有一个2的32次方的环(hash环),假设我们还是有3台服务器,hash(A)%2的32次方 = 结果。这个结果一定是0-2的32次方的整数,我们用这个整数代表服务器A,可以将这个服务器映射到hash环上。
3 一致性hash算法解决hash算法的问题
假设我们有一个服务器D,先把服务器映射到hash环上。
4 一致性hash算法的优点。
如果服务器的数量发生变化,并不是所有的缓冲会失效。
5 一致性hash算法的缺陷
hash偏斜。
导致缓冲不均匀,这里解决方法尽可能多的服务器,增加一些虚拟节点。
posted on 2021-09-11 19:30 XiaoXiaoli 阅读(67) 评论(0) 收藏 举报
浙公网安备 33010602011771号