仲裁与读写法定人数是什么
在 N 个副本的系统中,写操作需要写入 W 个副本、读操作需要读取 R 个副本才算成功。当满足 R + W > N 时,读集合与写集合必然存在交集,因此读到的至少有一个副本包含最新写入,这是法定人数(quorum)的基本思想。工程上常用的配置是 3 副本、写 2 读 2:既能容忍一个副本故障,也保证读写有交集。需要注意,R + W > N 只是简化条件下的性质,并发写、时钟偏差与故障恢复仍可能带来异常。
基本信息
| 基本公式 | R + W > N 时读写集合必有交集 |
|---|---|
| 常见配置 | N=3 时 W=2、R=2;可用性优先可降低 W,但会削弱读一致性 |
| 多数派要求 | 领导者选举通常需要超过半数副本参与 |
| 失效容忍 | 阈值内可容忍 N - W 或 N - R 个副本故障 |
| 工程差异 | 实际系统还涉及读修复、提示移交与不一致窗口 |
典型使用场景
- 分布式键值存储:为读写配置法定人数,平衡一致性与可用性
- 集群选主:领导者需多数派确认才能提交,防止脑裂双写
- 跨可用区部署:副本分散到三个可用区,容忍单区故障
- 弱一致读优化:把读配置为单副本提升吞吐,接受读到旧值的概率
- 仲裁节点部署:偶数副本场景下引入仲裁节点打破平票
- 容量权衡:按业务对一致性与延迟的要求调整 W 与 R
配置示例与计算
配置示例与计算
N = 3 副本
W = 2(写入多数派) R = 2(读取多数派)
R + W = 4 > N = 3 → 读写集合必有交集
# 可用性优先的取舍
# 降低 W 到 1:写延迟下降,但 R=1 时可能读不到最新值
# 提高 W 到 3:写入需全部副本确认,任一副本慢或故障都会拖慢写入
# 跨三可用区部署:单区故障仍可满足 W=2,但跨区网络抖动会直接影响延迟
# 注意:多数派只解决最新值可见性,不自动提供事务级别的可串行化典型配置对比
| 配置 | 一致性倾向 | 可用性与延迟 | 适用场景 |
|---|---|---|---|
| W=2 R=2 | 读写有交集,较强 | 容忍单副本故障 | 通用业务读写 |
| W=1 R=1 | 一致性弱 | 延迟最低、可用性最高 | 会话缓存、非关键数据 |
| W=3 R=1 | 写入强、读可能旧 | 写入对故障敏感 | 写少读多且要求写安全 |
| W=2 R=1 | 读可能读到旧值 | 读吞吐高 | 可接受短时陈旧的内容展示 |
R + W > N 并不自动带来线性一致:并发写之间缺乏全局顺序、时钟偏差、故障恢复期间的副本状态都可能导致异常,同一对象上的强顺序需要依赖共识协议。
副本分布要与故障域对齐:三个副本放在同一机架时,法定人数的条件满足,但机架断电会让多数派同时失效,容灾意义被抵消。