一致性Hash算法

本文介绍了在分布式缓存场景下,如何使用Hash算法进行数据分布,但当服务器数量变化时,原有的Hash策略会导致数据定位失效,引发缓存雪崩。为解决这一问题,引入了一致性Hash算法,通过在虚拟的Hash环上均匀分布服务器和数据,确保服务器增减时数据一致性。该方法减少了数据迁移,降低了对后端服务器的影响。
摘要由CSDN通过智能技术生成

对于一致性Hash算法,我们先来了解一下Hash算法以及其使用的场景(分布式缓存场景),即目前我们服务器都是分布式部署的,假设现在有上万张的图片需要存储到我们的分布式缓存服务器中,此时我们希望这些图片尽可能均匀地分布在每一个服务器上,此时我们首先想到的是Hash算法

我们假如此时存在三台服务器A,B,C,我们对于需要存储的图片key进行hash算法求出对应的hash值,然后使用hash % 服务器数量(此时为3) 求出余数,即为我们需要存储的服务器的id:

在这里插入图片描述

但是如果增加服务器的数量,由于此时服务器的增加,使得n发生变化,那么之前计算的结果,此时就会发生变化!!!导致不能访问到原来正确定位的数据,就会向数据库(后端服务器上)请求数据,从而发生缓存雪崩,后端服务器崩溃等问题。。。

解决方案:一致性算法

我们设置存在2的32次方的个点组成的hash圆环,此时我们我们将我们的服务A,B,C使用相同的hash算法,计算出对应的哈希值:hash(A),hash(B),hash©,此时将计算得到的hash值对我们的2^32进行取模计算,得到其在hash圆环上的对应的位置:

此时我们要存储的图片按照相同的hash算法计算出对应的hash值,然后也对2^32进行取模,找到圆环上对应存储的位置,接着按照顺时针查找,存储到遇到的第一个缓存服务器上,如图所示:

在这里插入图片描述

此时如果添加缓存服务器的个数,假设我们添加服务器D,计算其对应圆环的位置,假设如下图所示:

此时只存在一小部分的数据失效(图片访问到D缓存服务器上),需要重新从数据库中获取,大多数的缓存数据还是和增加缓存服务器之前保持一致性!!!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值