知识卡片
复制方式对线性一致性的可达性差异
内容
不同复制架构提供线性一致性的能力天差地别。[[复制的三种主流架构单主多主无主及其复杂度权衡]]中单主复制若从主库读,或从能确认自己仍是主库的同步从库读,理论上可以提供线性一致性;但很多实现为了性能会牺牲这点(例如异步从库读到旧数据、脑裂期间的旧主库仍在应答请求)。共识算法(Raft/Paxos/Zab类)从设计上就保证线性一致。多主复制天然不提供线性一致性,因为多个主库并发处理写入,之后再异步合并,会产生冲突数据。[[无主复制靠读写法定人数在故障中维持可用与新鲜度]](Dynamo风格)通常也不是线性一致的,即便使用严格法定人数(w+r>n):因为法定人数读写只保证”读到最新写”在没有并发冲突时成立,一旦读写发生时间上的重叠竞争,不同副本执行写入的先后顺序不同,客户端就可能读到不一致的中间状态——这与”多数投票即等价单副本”的直觉相反,是[[法定人数看似严格保证实则存在边缘陷阱及宽松法定人数的取舍]]的又一个具体表现。
结构图:
flowchart TD
A[复制架构] --> B[单主复制]
A --> C[共识算法 Raft/Paxos/Zab]
A --> D[多主复制]
A --> E[无主复制 Dynamo风格]
B -->|从主库/同步从库读且正确检测领导权| F[可提供线性一致性]
C --> F
D --> G[天然不提供: 并发写入异步合并冲突]
E -->|即使 w+r>n 严格法定人数| G
参考来源
- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"实现线性一致的系统"(源文件:_epub-src/ch9_split_000.html)
- 结论依据:原文逐一分析单主/共识算法/多主/无主复制提供线性一致性的能力,并给出n=3、w=r=2的具体反例说明严格法定人数读写仍不能保证线性一致,直接支撑本卡片的对比结构。
- 原始内容:单主复制(潜在地)是线性一致的……共识算法……是线性一致的……多主复制通常不是一个好主意……在具有无主复制的系统中……可能不是线性一致的。