一致性哈希学习

转自:https://developer.huawei.com/consumer/cn/forum/topic/0203810951415790238?fid=0101592429757310384

https://blog.csdn.net/weixin_43217065/article/details/107659713

1.普通哈希存在的问题

 

 对服务器的数量取模,当服务器数量变动的时候,所有缓存的位置都要发生改变。

当增加或者减少一台服务器(故障),hash(a.png) % 5 = ?或者hash(a.png) % 3 = ?结果肯定不会映射到第2台服务器上,那么所有缓存在一定时间内是失效的,当应用无法从缓存中获取数据时,则会向后端数据库请求数据,会出现雪崩的情况?

2.一致性哈希

一致性哈希是指将「存储节点」和「数据」都映射到一个首尾相连的哈希环上。

一致性Hash算法也是使用取模的方法,对2^32取模,将整个哈希值空间组织成一个虚拟的圆环,将各个服务器使用Hash进行一个哈希,具体可以选择服务器的IP或主机名作为关键字进行哈希。【那需要先将ip或者主机名的字符串转换为整型之后再对2^32取模?那string->int需要自己定义?】每次根据要缓存的对象计算得到hash值,在hash环上顺时针查找距离最近的缓存服务器节点:

 根据一致性Hash算法,数据A会被定为到Node A上,B被定为到Node B上,C被定为到Node C上,D被定为到Node D上。

2.1 容错性和可扩展性

减少服务器:

(对应到网络抖动判断服务不可用的情况)

假设Node C不幸宕机,可以看到此时服务器A、B、D中原有的缓存对象不会受到影响,仍可正常访问,只有C对象被重定位到Node D。

一般的,在一致性Hash算法中,如果一台服务器不可用,则受影响的数据仅仅是此服务器到其环空间中前一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间的数据,其它不会受到影响。

增加服务器: 

(对应到部署一个新服务的情况)

 假设在服务区B和C之间增加一台,那么受影响的数据仅仅是新服务器到其环空间中前一台服务器(即沿着顺时针方向行走遇到的第一台服务器)之间数据,其它数据也不会受到影响。

一致性Hash算法对于节点的增减都只需重定位环空间中的一小部分数据,具有较好的容错性和可扩展性。

3. 哈希环数据倾斜问题

一致性哈希算法不能够均匀地分布节点,会出现大量请求都集中在一个节点的情况,在这种情况下进行容灾与扩容时,容易出现雪崩的连锁反应。

之后再继续了解。

 

posted @   lypbendlf  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2018-08-09 PAT 1030 Travel Plan[图论][难]
2018-08-09 Andrew Ng-ML-第十四章-无监督学习
点击右上角即可分享
微信分享提示