剑指Offer(Redis)——Redis集群管理

如何从海量数据中快速找到需要的数据是在开发中关注的问题。。

分片:按照规则去划分数据,分散在多个节点上可以通过使用分片,降低单节点的压力。

Redis Cluster采用五中心结构,节点之间使用Gossip协议发送消息,或者发现新的节点,既然Redis目的是将key分布式的放在不同的节点上,这是如何实现的呢???

一般会获取到key的哈希值,根据节点数求模值,缺点是无法在一个节点上找到连续的key,因此需要介绍一下连续性的哈希算法。

一致性哈希算法:对2^32取模,使用哈希值模拟一个虚拟的圆环,将哈希值空间组织成一个虚拟的圆环。

将数据key使用相同的函数Hash计算出哈希值,确定此数据在环上的位置,从此位置沿环顺时针”行走“,遇到的第一台服务器就是其应该定位到的服务器。

假如有ObjectA、ObjectB、ObjectC、ObjectD四个数据对象, 经过哈希值计算后,环空间上的位置如下:
在这里插入图片描述
一致性算法,数据A被定位到NodeA上,B被定义到NodeB上,C被定义到NodeC上,D被定义到NodeD上。接下来分析一下一致性哈希算法的容错性和可扩展性。
假设NodeC宕机,看到A、B、C对象不会受到影响,只有C被重新定位到NodeD上。
在这里插入图片描述
在一致性算法中,如果一台服务器不可用,受到影响的数据仅仅是此服务器到其环空间中上一台服务器(即沿着逆时针方向行走遇到的第一台服务器)之间的数据,其他的对象不受影响。

在系统中增加一台服务器NodeX,结果如下图所示:
在这里插入图片描述
对象A、B、C不会受到任何影响,对象C重新定位到NodeX上。在一致性哈希算法中如果增加一台机器,受到影响的数据仅仅是新服务器到其环空间中上一台服务器(沿逆时针方向行走遇到的第一台服务器)之间的数据,其他数据不会受到任何影响。

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

但是一致性哈希算法也是存在一定缺点的,会带来数据倾斜。

这是随机的算法,所以可能会造成节点分布不均匀可能缓存会集中在一台服务器上,还会造成不好的结果,于是一致性哈希算法设置了虚拟节点,即对每一个服务节点计算多个哈希,每个计算结果位置都放置一个此服务节点称为虚拟节点。具体做法可以在服务器IP或主机名后面增加编号来实现。
在这里插入图片描述
同样还可以引入Redis主从分布,哨兵模式,保证Redis集群的高可用性。

发布了242 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44240370/article/details/104033320
今日推荐