【Redis Cluster集群】redis分布式数据存储核心原理

2.【Redis Cluster集群】redis分布式数据存储核心原理

  • 学习内容

redis 数据存储的核心算法

1. 最简单的数据分布算法-hash 算法

1.1 hash原理

  1. 来了一个key之后,计算hash值,然后对节点数量取模取模的结果一定是在0-(节点数量-1)之间,就可以根据取模结果将请求打到具体的某一节点上去

1.1 hash算法缺陷

一旦某一个master宕机了,当请求过来,会根据新的节点数量取模,请求会到和原先不同的master上去,导致几乎大部分请求,全部都无法拿到有效的缓存,大量的请求会全部涌入数据库,导致数据库压力剧增

举个例子:

假设有 3 个master节点,一个参数为3的请求过来,3 % 3 = 0,请求到达第一个节点;如果所有节点正常,后续参数为3的请求都会到第一个节点获取数据。

此时,如果一台机器宕机了,有效master数量才两个了,参数为3的请求过来,3 % 2 = 1,请求就会到第二个节点上去,第二个节点没有缓存数据,就会到数据库查询数据。导致数据库压力激增。

在这里插入图片描述

2. 一致性hash算法(搞了个圆环出来)

2.1 一致性hash算法原理

  1. 一个key过来,同样计算hash值,然后会用hash值在圆环的各个点上去(圆环上的每个点对应着一个hash值)去对比,看hash值落在圆环的哪个部位。
  2. key 通过hash值在圆环上找到自己的位置后,会顺时针的去寻找离自己最近的节点上获取自己所需要的数据。

2.2 一致性hash算法的优点。

一致性ahsh算法,保证,任何一个master宕机,只有之前哪个master节点上的数据会受到影响,因为照着顺时针走,全部落在宕机的那个master节点上的数据找不到了,就会继续顺时针到下一个master节点上找,也找不到。

只会导致 宕机节点数量 / 总节点数量 的数据失效,需要到数据库中重新查找。比 hash 算法 几乎100%的数据失效的后果会轻的多。

在这里插入图片描述

2.3 一致性hash算法存在的问题

存在 在某个 hash 区间的值特别多,导致大量的请求 分发到同一个master节点上,造成master节点热点问题

  • 解决方案- 在圆环上建立虚拟节点实现负载均衡,保证流量的最大分发到各个节点上。

在这里插入图片描述

给 每个节点做均匀分布的虚拟节点,这样的话,在每个区间内,大量的数据会均匀的分布到各个节点,而不是顺时针走,全部涌入到一个master节点上。

3. redis cluster 的hash slot 算法。

3.1 hash slot 算法原理

  1. redis cluster 有固定的16384个hash slot,对每个key计算CRC16值,然后对16384取模,可以获取到key对应的hash slot 是多少,redis cluster中的master都会持有部分slot,比如3个master,那么每个master平均下来就会有5000多个hash slot。

3.2 hash slot 算法优点:

  • 只会导致部分数据失效

当一个master宕机,不会导致所有的数据失效,因为key是通过对16384取模,而不是通过对有效的节点数量进行取模。比如:3个master节点,一个master节点宕机了,那上面的slot 就会迁移到其他的节点上去,当同一个请求再次发送过来的时候,就会再次到 slot 所在的新 节点获取数据。

  • hash slot的增加和删除很简单

hash slot 的增加 和 删除都很简单,增加一个master,就会将其他master的hash slot移动部分过去,减少一个master,就会将它的hash slot移动到其他master上去,移动 hash slot的成本非常低。

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值