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

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

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

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

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

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

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

Redis专题:Redis集群中哈希一致性算法原理
如上图所示,服务器节点位置相当接近,就导致了少量的服务器存储在了服务器192.168.0.1:1,大量的数据存储在了192.168.0.03:3,数据的分布不均匀

3.1 虚拟子节点Redis专题:Redis集群中哈希一致性算法原理

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