首页/开发/系统分析与架构设计速查/仲裁与读写法定人数

仲裁与读写法定人数

副本集通过法定人数(quorum)决定读写是否需要多数派参与;在 N 个副本中写 W 个、读 R 个,满足 R + W > N 时读可覆盖最近写入(简化条件下)。

仲裁与读写法定人数是什么

在 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 并不自动带来线性一致:并发写之间缺乏全局顺序、时钟偏差、故障恢复期间的副本状态都可能导致异常,同一对象上的强顺序需要依赖共识协议。
副本分布要与故障域对齐:三个副本放在同一机架时,法定人数的条件满足,但机架断电会让多数派同时失效,容灾意义被抵消。

易错点

  • 把 R + W > N 当作线性一致的充分条件:并发场景下仍出现异常行为
  • 跨机架或跨可用区副本分布不均:法定人数失去容灾意义
  • 为降低延迟随意下调 W:写成功后仍可能读到旧值,业务出现幻觉
  • 忘记选举也需多数派:少数派节点被误认为领导者,出现双写
  • 副本数设计为偶数但不设仲裁:平票场景下无法达成决议

数据来源与参考

  • Amazon Dynamo 论文(SOSP 2007)
  • 《数据密集型应用系统设计》(Kleppmann)第 5 章
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌