CAP 定理与一致性模型
CAP 定理指出,面对网络分区的分布式数据存储必须牺牲一致性或可用性之一,而一致性模型则精确地规定了系统在更新的可见性和排序方面提供何种保证。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
CAP 定理断言,一个联网的共享数据系统在一致性、可用性和分区容错性三者中最多只能同时保证两项;一致性模型是一种契约,规定了应用程序可以观察到跨副本读写操作的顺序和可见性。
Scope
本主题涵盖 CAP 定理及其形式化,即实际的权衡仅在网络分区期间出现这一实用解读,以及由此产生的 PACELC 细化。它涵盖了一致性模型的范围——从强(线性化)一致性到因果一致性再到最终一致性——以及与 ACID 对比的 BASE 风格。它探讨了这些模型如何指导复制数据存储的设计。它不包括用于实现强一致性的共识和提交协议,这些内容在分布式数据库中有所涵盖。
Core questions
- 在 CAP 中,一致性、可用性和分区容错性到底意味着什么?
- 为什么一致性和可用性之间的真正选择只在分区期间被迫进行?
- 强一致性、因果一致性和最终一致性在保证方面有何不同?
- 最终一致性承诺了什么,又没有承诺什么?
- BASE 哲学与 ACID 有何对比?
Key concepts
- 一致性、可用性、分区容错性
- 网络分区
- 线性化 / 强一致性
- 因果一致性
- 最终一致性
- PACELC
- BASE 与 ACID
- 冲突解决
Key theories
- CAP 定理
- 由 Gilbert 和 Lynch 形式化,CAP 表明当网络分区时,复制存储必须在返回可能过时的数据(可用性)和拒绝服务以保持单一一致值(一致性)之间做出选择;在真实网络中,分区容错性并非可选。
- 一致性谱系
- 一致性模型范围从强(线性化)一致性(读取总是看到最新的写入),到因果一致性(保留因果顺序),再到最终一致性(在没有新写入的情况下,副本会随着时间推移而趋于一致)。
- BASE 与 ACID
- 高可用系统通常采用 BASE 风格——基本可用、软状态、最终一致——故意放宽强 ACID 保证,以在分区和规模化下保持响应性。
Clinical relevance
CAP 和一致性模型构成了分布式数据系统中的核心设计选择:当网络出现故障时,存储是优先考虑始终响应(可用性)还是始终正确响应(一致性),这一决定塑造了每个全球分布式应用程序的行为和保证。
History
Eric Brewer 在 2000 年左右提出了 CAP 权衡猜想;Gilbert 和 Lynch 在 2002 年对其进行了正式证明。Amazon 的 Dynamo(2007 年)和 Vogels 2009 年的论文使最终一致性在实践中得以普及。Brewer 2012 年的回顾性文章澄清,CAP 仅在分区期间禁止完美的一致性和可用性,而 PACELC 公式后来在无分区情况下增加了延迟-一致性权衡。
Debates
- 一致性-可用性权衡的根本性如何
- 早期的解读将 CAP 视为强制在一致性和可用性之间做出永久选择;后来的分析,包括 Brewer 的回顾,认为这种权衡仅在分区期间才发生作用,并且系统在其他情况下可以大致保持一致和可用,这重新定义了 CAP 对设计的严格限制。
Key figures
- Eric Brewer
- Seth Gilbert
- Nancy Lynch
- Werner Vogels
Related topics
Seminal works
- gilbert2002
- brewer2012
- vogels2009
Frequently asked questions
- CAP 是否意味着我只能拥有这三个属性中的两个?
- 流行的“三选二”说法具有误导性。在分布式系统中,分区容错性并非真正可选,因此真正的选择是在一致性和可用性之间,而且这种选择只在实际发生分区时才需要做出。当网络健康时,系统可以同时提供一致性和可用性。
- 最终一致性到底保证了什么?
- 它保证如果不对数据项进行新的更新,所有副本最终将收敛到相同的值。它不保证何时收敛,也不保证读取会反映最新的写入,因此使用最终一致性的应用程序必须容忍暂时过时或冲突的读取,并且通常需要自行处理冲突解决。