一致性哈希学习
转自: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. 哈希环数据倾斜问题
一致性哈希算法不能够均匀地分布节点,会出现大量请求都集中在一个节点的情况,在这种情况下进行容灾与扩容时,容易出现雪崩的连锁反应。
之后再继续了解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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-第十四章-无监督学习