一致性哈希
1 为什么要用一致性哈希?
1.1 如何选择节点
对于分布式缓存来说,当一个节点接收到请求时,如果该节点没有存储缓存值,它面临的问题是:该从哪个节点获取数据?
假设现在存在 10 个分布式节点,当第一个节点接收到请求时,随机选择一个节点,由该节点从数据源获取数据,该节点从数据源获取数据的同时缓存该数据。当第二次接收到同样的key时,只有1/10的概率选择同一个节点,有9/10的概率命中其他节点,这就意味着要再次从数据源获取数据。这样做,一是缓存效率低;二是各个节点上存储着重复数据,浪费了大量的存储空间。
如何能够对于给定的key,每一次都选择同一个节点呢?使用hash算法也许可以。
那么怎么设计hash函数呢?
可以将key的每一个字符的ASCII码加起来,再对节点个数取模得到hash值。这样的确可以解决上述问题。
1.2 节点数量变化
简单设计函数计算hash值可以解决缓存性能的问题,但当节点数量发生变化时,所有的缓存值对应的节点都会发生改变,即几乎所有的缓存值都失效了。节点在接收到对应的请求时,都需要重新从数据源获取数据,容易引起缓存雪崩。
缓存雪崩:缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。常因为缓存服务器宕机,或缓存设置了相同的过期时间引起。
如何解决这个问题呢?一致性哈希可以。
2. 一致性哈希原理
一致性哈希算法将

最低0.47元/天 解锁文章
388

被折叠的 条评论
为什么被折叠?



