一、背景
分布式存储⼀般都是通过多副本的形式保证数据可靠,多副本之间使⽤⼀致性协议保证数据⼀致,所以⼀般都需要⼀个Leader节点负责协调写⼊,常见的分布式存储如Zookeeper的工作模式即是 Leader 协调写入,⾼并发场景下Leader单节点会成为系统的瓶颈,单节点的瓶颈本质就是中心化的问题。 所以解决的办法就是 采用去中心化的设计,比如redis cluster的模式。
二、宏观视角看redis cluster去中心化
redis cluster 模式 采用了去中心化的设计并且具备以下能力:
1) 可扩展性
- 横向扩展,通过增加机器实现增加能力上限
- 读写扩展,基于主从模式,通过读写角色分离,增强读写能力。
2) 高可用
- 避免单机故障
- 主从模式
3)负载均衡
- 数据分治
- 数据迁移
- 请求智能路由
4) 错误恢复
- 自动主从切换
三、微观视角看redis cluster去中心化
3.1 数据分治问题
本质就是数据和请求落在哪个节点上,或者说是一个节点都负责哪些数据的问题,即分布式存储,需要通过 数据分区策略(算法)来解决,并且需考虑以下问题:
- 可用性:仅部分不可用
- 维护方便 :仅针对不可用部分,针对性修复
- 均衡IO,数据和请求均衡到不同的节点中
- 改善查询性能,数据精准定位到节点中