一致性哈希算法

场景题:三台服务器,3w张图片,如何将图片均匀的存储在三台服务器中?

解决方案1:平均分配:将3w张图片平均的缓存在这三台服务器上。但是带来的问题是查找某个图片时,需要遍历三个节点服务器进行查找,效率太低。

解决方案2:Hash算法 / 取模算法:对缓存项的键进行哈希(Hash),然后将hash后的结果对服务器的数量N进行取模,操作,取模之后的数字决定缓存在哪一台服务器上。

  • 优点:当访问任意一个图片的时候,只需要再次对图片进行上面的操作(hash之后再取模),即可得出对应的图片存储的位置在哪个服务器上,接下来只需要在这个服务器上查找即可,效率提高了N倍。

  • 缺点:

    • 当服务器数量发生改变时,缓存就会失效,大量的缓存失效会导致缓存雪崩,可能会导致整体的系统压力过大而崩溃。
    • 当服务器数量发生变化时,几乎所有缓存的位置都会发生改变,怎样尽量减少受影响的缓存?

解决方案3:一致性哈希
一致性哈希算法也是取模,和Hash算法不同,Hash算法是对服务器数量或者容器的容量进行取模运算,而一致性哈希则是对2^32取模
hash环:0~2^32-1组成的圆环,是一个封闭的圆环。
环上映射两种元素:服务器的IP地址、缓存
解决缓存分布不均匀的方法:虚拟节点,虚拟节点是将一个真实的cache在圆圈上复制几份作为虚拟节点,如图6。当集群中增加一个真实cache 时,对应的增加一定数量的虚拟节点,当集群中删除一个真实的cache时,其所对应的虚拟节点都会被删除。

参考链接:一致性哈希算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值