一文彻底讲透:经典 Quorum 机制(法定人数机制)
这是分布式系统里最核心、最通用的一致性理论,ZooKeeper、Raft、Redis Cluster、Dynamo 全都在用。
一句话概括:
通过“写至少 W 个节点、读至少 R 个节点”,并满足 W+R>N,来保证强一致。
一、先定义三个变量
假设有 N 个副本节点:
- N:总副本数
- W:Write Quorum,写入成功需要确认的最少节点数
- R:Read Quorum,读取需要读取的最少节点数
核心公式(必背)
W + R > N
只要满足这个公式,一定能读到最新数据,不会出现脏读。
二、为什么 W+R > N 就能强一致?
核心原理:
任意写成功的集合,与任意读的集合,必然有交集。
举个例子:
- N = 5 个节点
- W = 3(写过半)
- R = 3(读过半)
W+R=6 > 5
任何一次成功写入,都至少落在 3 个节点上。
任何一次读取,都至少读 3 个节点。
两个集合加起来超过总数,必然至少重叠 1 个节点。
这个重叠节点,一定持有最新版本数据。
所以:
- 你一定能读到最新值
- 不会出现“写成功了却读到旧数据”
这就是 Quorum 机制的数学保证。
三、最经典的配置:过半机制(ZK、Raft 都用这个)
最常用、最简单的 Quorum 配置:
W = 过半,R = 1
为什么可以 R=1?
因为:
- W > N/2
- R=1
- 必然满足 W+R > N
所以:
- 写:必须过半成功
- 读:随便读一个节点就行(配合版本校验即可强一致)
这就是 ZooKeeper、etcd、Raft 的标准模型。
优点:
- 读性能极高
- 一致性极强
- 天然防脑裂
四、为什么“过半”是最优选择?
1. 可用性最好
- N=3,W=2:允许挂 1 台
- N=5,W=3:允许挂 2 台
挂掉不到一半,集群依然可用。
2. 防止脑裂(最重要)
如果网络分裂成两个分区:
- 分区A:<N/2 个节点
- 分区B:>N/2 个节点
只有分区B能凑齐 Quorum,能写、能选主。
分区A无法写入,无法成为合法集群。
→ 永远不会出现双主、双写。
3. 一致性与性能平衡
- 写全部节点:一致性最强,但可用性极差
- 写1个节点:性能最高,但完全不可靠
- 写过半:性能、一致、可用三者平衡
五、Quorum 机制的完整意义
Quorum 机制解决分布式三大问题:
-
强一致性
W+R>N,读写集合必有交集,保证读到最新。 -
高可用
部分节点挂掉,只要剩余过半,仍可服务。 -
防脑裂
同一时刻最多只有一个集群能达成 Quorum,避免双主。
六、面试标准答案(直接背)
Quorum(法定人数)机制是分布式系统保证强一致性与高可用的核心算法。
其核心规则为:
总副本数 N,写入最少确认 W 个节点,读取最少 R 个节点,满足 W+R>N,则可保证强一致。
最经典实现是过半机制:
- W > N/2,R=1
- 任意两个过半集合必然相交,保证读到最新数据
- 同时避免网络分区导致的脑裂问题
- 兼顾写入性能、数据可靠性与集群可用性
ZooKeeper 的 ZAB、Raft 协议、etcd 等一致性系统,均基于此机制设计。
百流积聚,江河是也;文若化风,可以砾石。

浙公网安备 33010602011771号