Redis算法(一)Consistent hashing一致性算法

Redis算法(一)Consistent hashing一致性算法

Redis分布式算法

传统
采取hash取模的方式处理数据与服务器节点的映射关系,将value映射在一个32位的key中
弊端
在变动服务器节点后,命中率大大降低(如果业务代码是穿透型的,就会穿过cache直击db)

Consistent hashing一致性算法

一致性hash算法,1997年被提出
环形hash空间,取值范围0-2^32-1
基本实现原理
对象算出hash值,映射到hash空间
cache(服务器节点、端口号等)映射到hash空间
对象映射到cache,对象顺时针去寻找,碰到的第一个cache节点就作为该对象的存储节点,这样,增加和删除Cache,影响不大Redis算法(一)Consistent hashing一致性算法
遇到的问题:hash倾斜性
对象节点分布不均匀,可能导致部分服务器负载很高,部分清闲
解决方法:虚拟节点
真实cache节点分别映射出大量虚拟节点,对象映射到全部虚拟节点上,再对应到各cache节点
Redis算法(一)Consistent hashing一致性算法
优点: 通过命中率计算公式(1-n/(n + m)) * 100%
n:服务器台数
m:服务器变动台数
随着分布式集群不断扩大,变动的服务器台数越大,命中率就会越大,影响越小

参考:https://www.jianshu.com/p/d219ab18d773