Redis(七)--分片技术详解

介绍

Redis分片(Sharding)技术是指将数据分散到多个Redis实例中的方法,分片之后,每个Redis拥有一部分原数据集的子集。在数据量非常大的时候,这种技术能够将数据量分散到若干主机的Redis实例上,进而减轻单台redis实例的压力。分片技术能够以更扩展的方式使多台计算机的存储能力和计算能力:

  1. 从存储能力角度,分片技术通过使用多台计算机的内存来承担更大量的数据,如果没有分片技术,那么Redis的存储能力将受限于单台主机的内存大小。
  2. 从计算能力角度,分片技术通过将计算任务分散到多核或者多台主机中,能够充分利用多核、多台主机的计算能力。

Redis集群采用了去中心化的思想,对于客户端来说,整个集群可以看成一个整体,可以连接任意一个节点进行操作,不需要任何代理中间件,当客户端操作的key没有分配到该node上时,Redis会返回转向指令,指向正确的node。

未采用分片技术的单Redis实例:对这1000万条数据的所有增删改查操作压力都会集中在这个Redis所在的主机,此时不仅有存储和操作对该主机的压力,还有该主机失效时将导致所有操作都无法进行的问题。

在这里插入图片描述
采用分片技术:
在这里插入图片描述
采用分片技术之后,数据将被分散到4个Redis实例中,对数据的操作也被分散到每个Redis实例中,此时单台主机的压力将大大减轻。
总结
Redis单实例架构,从最开始的一主N从,到读写分离,再到哨兵机制,单实例的Redis缓存能够应对大多数的使用场景,也能实现主从故障迁移。
但是,在某些场景下,单实例Redis缓存会存在以下几个问题:

  1. 写并发:
    Redis单实例读写分离可以解决读操作的负载均衡,但对于写操作,仍然是全部落在了master节点上面,在海量数据高并发场景,一个节点写数据容易出现瓶颈,造成master节点的压力上升。
  2. 海量数据的存储压力:
    单实例Redis本质上只有一台Master作为存储,如果面对海量数据的存储,一台Redis的服务器就应付不过来了,而且数据量太大意味着持久化成本高,严重时可能会阻塞服务器,造成服务请求成功率下降,降低服务的稳定性。

针对以上的问题,Redis集群提供了较为完善的方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题
在这里插入图片描述
Redis也内置了高可用机制,支持N个master节点,每个master节点都可以挂载多个slave节点,当master节点挂掉时,集群会提升它的某个slave节点作为新的master节点。
Redis集群可以看成多个主从架构组合起来的,每一个主从架构可以看成一个节点(其中,只有master节点具有处理请求的能力,slave节点主要是用于节点的高可用)

Redis集群的数据分布算法:哈希槽算法

1. 什么是哈希槽算法
对于分布式存储,需要考虑的重点是如何将数据进行拆分到不同的Redis服务器上。常见的分区算法有hash算法、一致性hash算法。

  • 普通hash算法:将key使用hash算法计算之后,按照节点数量来取余,即hash(key)%N。优点就是比较简单,但是扩容或者摘除节点时需要重新根据映射关系计算,会导致数据重新迁移。
  • 一致性hash算法:为每一个节点分配一个token,构成一个哈希环;查找时先根据key计算hash值,然后顺时针找到第一个大于等于该哈希值的token节点。优点是在加入和删除节点时只影响相邻的两个节点,缺点是加减节点会造成部分数据无法命中,所以一般用于缓存,而且用于节点量大的情况下,扩容一般增加一倍节点保障数据负载均衡。

Redis集群采用的算法是哈希槽分区算法。Redis集群中有16384个哈希槽(槽的范围是 0 -16383,哈希槽),将不同的哈希槽分布在不同的Redis节点上面进行管理,也就是说每个Redis节点只负责一部分的哈希槽。在对数据进行操作的时候,集群会对使用CRC16算法对key进行计算并对16384取模(slot = CRC16(key)%16383),得到的结果就是 Key-Value 所放入的槽,通过这个值,去找到对应的槽所对应的Redis节点,然后直接到这个对应的节点上进行存取操作。
使用哈希槽的好处就在于可以方便的添加或者移除节点,并且无论是添加删除或者修改某一个节点,都不会造成集群不可用的状态。当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了;

哈希槽的特点:

  • 解耦数据和节点之间的关系,简化了扩容和收缩难度;
  • 节点自身维护槽的映射关系,不需要客户端代理服务维护槽分区元数据
  • 支持节点、槽、键之间的映射查询,用于数据路由,在线伸缩等场景
    2. 哈希槽相关的数据结构
    (1)clusterNode:保存节点的当前状态,比如节点的创建时间、节点的名字、节点的当前配置纪元(用于实现故障转移)、
  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值