redis集群(一)数据分布理论

1.数据分布理论

顺序分区和哈希分区(数据分区是分布式存储的核心)

redis集群(一)数据分布理论

redis集群(一)数据分布理论

 哈希分布:

(1)节点取余分区  (2)一致性哈希分区(3)虚拟槽分区(redis cluster采用的方式)

(1)节点取余分区:键的hash值对节点数取余

redis集群(一)数据分布理论

出现的问题:增加节点时数据偏移,导致数据的前移达到80%

redis集群(一)数据分布理论redis集群(一)数据分布理论

如何避免出现的问题:翻倍扩容可以使数据迁移从80%降到50%

redis集群(一)数据分布理论

redis集群(一)数据分布理论

 

(2)一致性哈希:解决了上述取余分区的问题、为系统中每个节点分配一个token,范围一般在0~2的32次方,这些token构成哈希环。数据读写执行节点查找操作时,先根据key计算hash值,然后顺时针找到第一个大于等于该哈希值的token节点。例如,按照顺时针的原则,当key的hash出现在n1和n2之间,则该key就对属于n2;

 redis集群(一)数据分布理论

 一致性哈希扩容:当添加节点时,只会影响相邻的节点;(适用于节点较多的情况)

出现的问题:①加减节点会造成哈希环中部分数据无法命中,需要手动处理或者忽略这些数据,常用于缓存场景。因为加入node5之后,原来缓存在node2的部分数据,只能在node5中获取,但是node5没有!

②当使用少量节点时,节点变化将大范围影响哈希环中数据映射,因此不适合少量数据节点的分布式方案。

③普通的一致性哈希分区在增减节点时需要增加一倍或者减少一半,才可以保证数据和负载均衡!

redis集群(一)数据分布理论

redis集群(一)数据分布理论

 (3)虚拟槽分区

 虚拟分槽使用良好的哈希函数把所有数据映射到一个固定范围的整数集合中,整数定义为槽(slot)。

这个范围远远大于节点数,比如redisCluster槽的范围是0~16383;

每一个节点负责维护一部分槽以及所映射的键值数据。

redis集群(一)数据分布理论

 虚拟槽分区的特点:

(1)解耦数据和节点之间的关系,简化了节点扩容和收缩的难度。

(2)节点自身维护槽的映射关系,不需要客户端或者代理服务维护槽分区元数据

(3)支持节点,槽,键之间的映射关系,用于数据路由、在线伸缩等场景。