欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Redis的数据分布算法

时间:2023-07-07

前言

所谓的数据分布算法,指的是当有多个节点时,按照什么样的规则来把数据分布到这些节点上。

对于Redis来说就是,在使用redis cluster部署时,使用不同的数据分布算法,就决定了缓存数据如何分布到这些master节点上去。

redis cluster 介绍

多个master:自动将数据进行分片,每个master上放一部分数据

每个master有一个或多个slave:提供内置的高可用支持,当master不可用时,master下的slave可以被选举上来,成为新的master。

在redis cluster架构下,每个redis要放开两个端口号,比如一个是6379,另外一个就是加10000的端口号,比如16379 16379端口号是用来进行节点间通信的,也就是cluster bus的东西,集群总线。cluster bus的通信,用来进行故障检测,配置更新,故障转移授权。

cluster bus用了另外一种二进制的协议,主要用于节点间进行高效的数据交换,占用更少的网络带宽和处理时间。

1.最老土的hash算法和弊端(大量缓存重建)

就是根据key计算出的hash值,根据master节点数量进行取模,然后根据余数分布到不同的master节点上。

缺点:一旦某个master挂了,那么就面临大量的(几乎所有的)key的迁移,大量缓存会失效。

比如本来有5个master节点,挂了一个,只剩4个master了,那么hash(key) % 5 != hash(key) % 4 的所有key都需要进行迁移。

2.一致性hash算法(自动缓存迁移)+虚拟节点(自动负载均衡)

一致性Hash算法(Hash环):

3个master节点计算出的hash值落在hash环上,key计算出的hash值同样落在hash环上,然后顺时针去寻找最近的hash(master)节点,然后将key打到对应的master上。

如果某个master挂了,那么只会影响到1/3的key进行迁移,缩小了需要迁移的key的数量。

缺点是:当master1挂了之后,本来在master1上的大量的key都会顺时针找到离自己最近的另一个master2,这是master2与master3数据分布不均匀,而且master2因为key数据量太多,造成局部热点问题。

虚拟节点:

给每个master都做了均匀分布的虚拟节点。

可以使每个master的数据量分布均匀,而且当某个master挂了之后,失效的key会均匀地落到剩下的master节点上。

3.redis cluster的hash slot算法

Hash(key) ---> hash slot ---> master,其中hash slot的数量固定,hash(key)与hash slot的对应关系不会发生变化,hash slot与master节点的对应关系由redis cluster维护,在master挂了之后会自动进行hash slot的迁移,在增加或删除master节点时可以指定迁移数量。

redis cluster有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取key对应的hash slot;

redis cluster中每个master都会持有部分slot,比如有3个master,那么可能每个master持有5000多个hash slot;

hash slot让node的增加和移除很简单,增加一个master,就将其他master的hash slot移动部分过去,减少一个master,就将它的hash slot移动到其他master上去;

移动hash slot的成本是非常低的。

客户端的api,可以对指定的数据,让他们走同一个hash slot,通过hash tag来实现。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。