Redis专题:Redis集群中哈希一致性算法原理

在Redis分布式集群中,保证数据能够均匀的分布在集群中每个机器中是Redis追求的基本操作,由于redis中的数据是动态变化的,所以为了保证通过最小的代价保证数据均匀分布,哈希一致性算法被提出

1.常规的解决方案导致的问题

如果集群中存在两台服务器,为了保证数据均匀的落在这两台服务器中,常规的解决方案:

  • 拿到每条数据的key值,并对其进行哈希处理
  • 拿到哈希值之后用其模上集群中机器得数量
  • 将得到结果对应数据存放到对应编号的机器
    在这里插入图片描述
    对与数据量小的业务,这种方案可以很好的保证数据可以均匀的分布在每台服务器中,但是后期随着数据量的增大,势必就要增加集群中服务器的数量,所以对所有的数据需要重新梳理找到其合适的存放位置,那么问题就随之而来,一次性对所有的重新数据梳理的工程量非常大,所以哈希一致性算法能够完美的解决该问题
2. 哈希一致性算法的原理

redis集群中,每台服务器都有自己的Ip地址以及服务器编号,假设如下图所示的哈希环中存在2^32个节点,以服务器的IP地址以及服务器对应的编号作为哈希对象,哈希之后得到结果对应该哈希环上某个点。
在这里插入图片描述
同理,对数据的Key值进行哈希之后得到一个的值也存在哈希环上的某一个位置,然后顺时针移动,将其存储在第一个遇到的服务器
在这里插入图片描述
如果向其中添加一台服务器,其原理相同,这样可以保证只移动一部分数据就可以完成数据的迁移
在这里插入图片描述
如果某台服务器突然挂掉的话,那么只将其原理存储在该服务器中数据顺时针移动到紧接的下一个节点的服务器中
在这里插入图片描述

3. 数据倾斜问题的解决
  • 存储框架的数据倾斜
  • 计算框架的数据倾斜

在这里插入图片描述
如上图所示,服务器节点位置相当接近,就导致了少量的服务器存储在了服务器192.168.0.1:1,大量的数据存储在了192.168.0.03:3,数据的分布不均匀

3.1 虚拟子节点在这里插入图片描述

如图所示,将服务器虚拟除一个新的子节点,该虚拟的子节点依然存在在哈希环,哈希环来说节点的数量越多,分布的越均匀,然后继续按照顺时针的移动规则移动数据到对应的服务器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值