前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在集群扩容和收缩时却有一定的局限性

在集群扩容和收缩时却有一定的局限性

原创
作者头像
用户7737280
发布2022-01-12 17:13:54
2660
发布2022-01-12 17:13:54
举报
文章被收录于专栏:用户7737280的专栏

比如:一个服务器节点挂了,计算公式从hash(key)% 3变成了hash(key)% 2,结果会发生变化,此时想要访问一个key,这个key公开选拔的缓存位置大概率会发生改变,那么之前缓存key的数据也会失去作用与意义。

大量缓存在同一时间失效,造成缓存的雪崩,进而导致整个缓存系统的不可用,这基本上是不能接受的,为了解决优化上述情况,一致性hash算法应运而生~那么,一致性哈希算法又是如何解决上述问题的?

服务器映射到hash环这个时候计算公式就从hash(key)% N 变成了**hash(服务器ip)% 232**,使用服务器IP地址进行hash计算,用哈希后的结果对232取模,结果一定是一个0到2^32-1之间的整数,而这个整数映射在hash环上的位置代表了一个服务器,依次将node0node1node2公开选拔三个缓存服务器映射到hash环上。那它又是如何优化集群中添加节点和缩减节点,http://www.gongxuanwang.com 普通取模算法导致的缓存服务,大面积不可用的问题呢?

先来看看扩容的场景,假如业务量激增,系统需要进行扩容增加一台服务器node-4,刚好node-4被映射到node-1node-2之间,沿顺时针方向对象映射节点,发现原本缓存在node-2上的对象key-4key-5被重新映射到了node-4上,公开选拔 而整个扩容过程中受影响的只有node-4node-1节点之间的一小部分数据。一致性Hash算法引入了一个虚拟节点机制,即对每个服务器节点计算出多个hash值,它们都会映射到hash环上,映射到这些虚拟节点的对象key,最终会缓存在真实的节点上。

虚拟节点的hash计算通常可以采用,对应节点的IP地址加数字编号后缀 hash(10.24.23.227#1) 的方式,举个例子,node-1节点IP为10.24.23.227,正常计算node-1http://www.gongxuanwang.com 的hash值。

  • hash(10.24.23.227#1)% 2^32假设我们给node-1设置三个虚拟节点,node-1#1node-1#2node-1#3,对它们进行hash后取模。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档