Redis Cluster

一、问题定义层(Why)——Redis Cluster 试图解决什么?

1. Redis 单机模型的物理极限

Redis 本质是:

单进程、内存型、事件驱动的 Key-Value 引擎

这一模型带来极高性能的同时,也内生了不可突破的上限:

当数据规模与并发持续增长时,单机 + 主从复制只能解决可用性,而无法解决容量与吞吐扩展

2. Redis Cluster 的核心目标

Redis Cluster 的目标可以高度抽象为一句话:

在保持 Redis 简单模型的前提下,实现容量与吞吐的水平扩展(Scale Out)

因此,它的设计优先级是:

  1. 可线性扩展
  2. 去中心化
  3. 自动化故障恢复

而不是:

这是一个“缓存系统”的架构选择,而不是“数据库”的选择。


二、核心架构思想(What)——Redis Cluster 的三大不变原则

原则一:数据必须分片(Sharding is Mandatory)

要突破单机极限,唯一出路是:

将 Key 空间切分,分布到多个节点上

这意味着:

从这一刻起,分布式事务被放弃是必然结果,而非实现缺陷


原则二:拓扑变化必须对客户端最小侵入

集群意味着:

如果客户端需要理解全部拓扑变化,系统将极度复杂。

因此 Redis Cluster 引入了一个稳定的中间抽象层

Hash Slot(虚拟槽)


原则三:系统必须去中心化

Redis Cluster 明确拒绝:

选择的是:

所有节点平权 + 最终一致的集群视图

这是一个典型的分布式系统工程取舍。


三、机制层(How)——关键设计如何落地

3.1 Slot:稳定抽象边界(Stable Abstraction Boundary)

Slot 的本质

Redis Cluster 固定定义:

Slot 的设计目标不是均匀,而是:

稳定

Slot 作为中间层,完成了三重解耦:

Key  ──▶ Slot ──▶ Node ──▶ Memory

Slot 是人为引入的“稳定边界”,不是数学最优解。


3.2 路由模型:客户端参与的去中心化路由

MOVED:稳定态路由

当客户端访问错误节点时:

这是一种:

将路由状态下推给客户端的设计

优点:

代价:


ASK:过渡态路由

ASK 出现于:

Slot 正在迁移过程中

它的语义是:

这体现了 Redis Cluster 的一个重要哲学:

承认系统处于不稳定中间态,而不是强行隐藏它


3.3 成员管理:Gossip 作为控制平面

去中心化控制平面

Redis Cluster 没有:

而是通过 Gossip 协议:

这意味着:

这是用确定性换取可扩展性的经典模式


四、高可用模型(Failover)——可用性优先的选择

4.1 故障判定

这是一个:

弱共识 + 多数派确认 的模型


4.2 主节点替换

当持有 Slot 的主节点失败:

注意:

Failover 的对象是 Slot,而不是节点本身


五、伸缩机制(Scaling)——在线系统的代价

5.1 扩容的本质

扩容不是“加机器”,而是:

重新分配 Slot 责任

过程包括:

  1. 标记迁移状态
  2. 同步迁移 Key
  3. 更新 Slot 映射

迁移是:

这是在线系统为一致性付出的现实代价。


六、代价层(Trade-off)——必须接受的限制

这些限制不是"缺陷",而是设计结果。

限制架构根因
多 Key 操作受限数据分片
单 DB简化元数据
Pub/Sub 成本高全节点广播
热点 Key分片粒度固定

七、运维视角:从现象到模式

模式一:去中心化的通信放大

模式二:稳定抽象的迁移成本

模式三:逻辑均匀 ≠ 物理均匀


八、架构定位总结

Redis Cluster 是:

它非常适合:

但不适合:

关联内容(自动生成)