Redis怎么支持大量数据
Redis cluster 构建集群,进行分片。将数据分到不同分片上
分片保证高可用采用主从模式 由多台Redis 组成分片
Redis引入槽(slot),集群固定16384(16*1024)
数据落入或读取时对其key进行hash运算得到槽值,通过查找本身维护的元数据(槽值,节点位置映射) 获得槽所在节点
如果本身是当前节点直接操作,否则返回给客户端重新定位到具体节点进行操作
Redis Cluster 为啥不适合做超大规模集群
Redis cluster 集群的采用的是中心化配置(每个节点都存储了元数据)
假设分片A的B主节点挂掉。自动切换到A分片的C从节点,其它节点的元数据要将A->B 改为 A->C 才能正确告诉客户端找到正确的节点进行访问
Redis cluster 的元数据变动采用的是流言传播机制
导致集群越大,变更速度越慢
故 说它不适合做超大规模集群
怎么构建超大规模Redis集群
要构建超大规模就要解决Redis cluster 的去中心化配置问题
有两种解决方案
1.引入代理服务层
在Redis cluster 上加上代理服务层
代理服务层负责:元数据维护,变更(监控节点进行元数据变更),进行与redis交互(请求响应转发)
优点:和用单机Redis没啥区别
缺点:访问链路变长,代理服务是单点,代理服务做成集群 又太复杂
2.定制版客户端 + 元数据维护节点(Redis从节点挂掉,选出新的主节点去更新元数据)
客户端加入寻址功能
客户端进行访问前通过查找元数据中的节点,然后进行直连
优点:和单机redis没啥区别,元数据虽然是单点,但访问量并不大(还可以做缓存)
缺点:需要定制化开发,只有大的企业才用的起
|