一致性哈希算法简单理解

一致性哈希算法简单理解

现有问题

假设一张图片要存储到三台服务器(S0、S1、S2)上,根据哈希算法,这里假设用图片的的名称用固定的哈希算法得到哈希值,对机器数取余,得到的值就是要存储的服务器的编号。

这种方案在不添加服务器时不会产生问题,但是对服务器进行扩容之后,假设机器数变成了4,再用原始的哈希算法就无法得到一张图片的真正存储服务器的编号。这会造成所有的缓存都失效,引起缓存雪崩。

解决办法

一致性哈希算法:

引进哈希环的概念,该环上有2^32(哈希值是int型)个节点。

  1. 对服务器编号进行哈希,再对2^32取余,则每个服务器都会映射到哈希环上的一个节点。

  2. 对要存储的文件名称进行哈希,再对2^32取余,则每个文件都会映射到哈希环上的一个节点。

  3. 然后文件会存储在哈希环上离文件节点最近的服务器节点上。

此时再考虑之前的问题能否解决

​ 假设又引进了一台服务器S4,它可能会映射到某个文件节点和某个服务器节点之间,这样会导致该文件节点最近的服务器节点发生改变,所以该文件缓存失效。但是,其他文件缓存并不一定也会失效。这就是一致性哈希算法的优点:从全部失效变为部分失效,缓存能够分担大部分的压力 。

hash偏斜

实际生产环境中,可能大部分的服务器节点都映射到一小部分节点区域中,不会均匀分布在整个哈希环上。这就导致文件可能大部分都存储在一台缓存服务器上。

为了解决该问题,引入了虚拟节点。基于实际的服务器节点可以映射出很多虚拟的服务器节点,将虚拟节点放置在哈希环上。哈希环上的缓存服务器节点越多,缓存被均匀分布的概率就越大。

缓存读写------>虚拟节点------>真实节点------>读写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值