首页 > 编程知识 正文

负载均衡一致性hash算法,一致性hash 虚拟节点

时间:2023-05-03 11:47:05 阅读:53793 作者:3765

假设在hash中创建缓存,有三台服务器、1、2、3、3万张图像。 我想在三台服务器上平均缓存图像。 一台服务器大约一万张。 怎么实现这个方法? 可以用hash去除余数进行操作。 我们将图像的名称作为key进行混列计算。 hash (图像名称) ) n作为我们服务器的hash。我们计算出hash (图像名称)这一部分得到的是正数,除以服务器的数量得到余数,结果为0,1,2这三个数,对应于我们服务器的号码我们以客户端身份去请求图像时,图像已经进行了混列运算,直接找到对应的服务器号码进行图像访问,解决了我需要巡视所有服务器进行查找的问题。

如果我缓存的服务器数量减少或增加,但保持原始算法不变,一定会发生缓存数据丢失,我会去请求后端服务器。 如果一台缓存服务器发生故障,我原来的缓存位置一定会改变。 如果在原始运算后要缓存在服务器上的图像现在找不到对应的缓存服务器,则肯定会发生缓存雪崩

因此,出现一致的散列算法,就相当于将服务器和图像分别散列到我的散列中,并进行邻居缓存。 哈希环是指取2^32次幂的模型,从0到2^32均匀地分布在圆环上。 0的顺时针第1位为1,逆时针第1位为2^32,大致如下图所示

具体而言,例如,假设3个服务器a、b、c将其设为混列(服务器Aip ) %2^32而得到一定是整数,且一定在0--2^32之间,则该数量分布在混列循环上的对应位置,相同的b 假设我们散列后的ABC的位置如下图所示

然后hash需要缓存图像的密钥。 那个散列值也分布在我的散列环上。

如上图所示,我在a和c之间混了。 图像的存储规则是顺时针存储,所以应该存储在a中。 有4张的话如下图所示

如果我们的散列算法使服务器和散列图像的存储位置比较近,相似;

如果所有缓存都集中存储在a1台上,而只有5台到b,则a的压力不言而喻。 不均匀。 得益于散列环,可以添加缓存服务器的虚拟节点。 类似于虚拟机。 类似于一台实机可以虚拟多台。

这样,就尽可能把缓存均等地配置在各服务器中

一致性算法的优点是什么? 一种情况是,缓存节点停机时,缓存存储不会受到太大影响。

移除Web节点并将其保存到Web节点的3根据规则缓存到Web节点,因为找不到Web服务器,但4的缓存节点保持不变。 这是hash一贯的优势,随着服务器的增加或减少,某些缓存将被禁用,并且不会完全失败

共识散列到此结束。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。