[GoCache] 一致性哈希

一致性哈希

1 为什么要用一致性哈希?

1.1 如何选择节点

对于分布式缓存来说,当一个节点接收到请求时,如果该节点没有存储缓存值,它面临的问题是:该从哪个节点获取数据?

假设现在存在 10 个分布式节点,当第一个节点接收到请求时,随机选择一个节点,由该节点从数据源获取数据,该节点从数据源获取数据的同时缓存该数据。当第二次接收到同样的key时,只有1/10的概率选择同一个节点,有9/10的概率命中其他节点,这就意味着要再次从数据源获取数据。这样做,一是缓存效率低;二是各个节点上存储着重复数据,浪费了大量的存储空间。

如何能够对于给定的key,每一次都选择同一个节点呢?使用hash算法也许可以。

那么怎么设计hash函数呢?
可以将key的每一个字符的ASCII码加起来,再对节点个数取模得到hash值。这样的确可以解决上述问题。

1.2 节点数量变化

简单设计函数计算hash值可以解决缓存性能的问题,但当节点数量发生变化时,所有的缓存值对应的节点都会发生改变,即几乎所有的缓存值都失效了。节点在接收到对应的请求时,都需要重新从数据源获取数据,容易引起缓存雪崩

缓存雪崩:缓存在同一时刻全部失效,造成瞬时DB请求量大、压力骤增,引起雪崩。常因为缓存服务器宕机,或缓存设置了相同的过期时间引起。

如何解决这个问题呢?一致性哈希可以。

2. 一致性哈希原理

一致性哈希算法将

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值