18. CAP 定理
18. CAP 定理
CAP 定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),由计算机科学家 Eric Brewer 于 2000 年提出,是分布式系统设计的一个重要理论框架。
CAP 代表了 Consistency (一致性)、Availability (可用性) 和 Partition Tolerance (分区容错性)。
CAP 定理表明,对于一个分布式计算系统来说,不可能同时满足这三个属性,必须在其中进行权衡。
CAP 的三个组成部分
Consistency (一致性):
- 系统中的所有节点在同一时间看到的数据必须一致。
- 举例:在一个银行应用中,无论用户访问哪个节点,账户余额应该是相同的。
Availability (可用性):
- 每个请求都能在有限的时间内得到响应,无论结果是否一致。
- 举例:即使某些节点无法同步最新数据,系统仍然能够返回一个结果,避免服务不可用。
Partition Tolerance (分区容错性):
- 系统在出现网络分区时仍然能够继续运行。网络分区是分布式系统中的常见问题,比如节点之间通信失败或延迟过高。
- 举例:当节点 A 和节点 B 之间的通信断开时,系统应能够继续服务,不至于完全崩溃。
CAP 定理的核心:两难选择
CAP 定理指出,当网络分区(P)发生时,分布式系统必须在一致性(C)和可用性(A)之间做出选择:
Consistency + Partition Tolerance (CP):
- 优先保证一致性,牺牲一定的可用性。
- 示例:分布式数据库 MongoDB 中的强一致性模式。
- 场景:金融交易系统,数据一致性要求高。
Availability + Partition Tolerance (AP):
- 优先保证可用性,允许数据短时间内不一致。
- 示例:DNS 系统,在网络分区时仍然响应用户请求,但可能返回旧数据。
- 场景:社交媒体、缓存系统。
PACELC:CAP 定理的延伸
CAP 定理关注网络分区的场景,而 PACELC 模型进一步补充了非分区情况下的权衡:
PACELC: Given P, choose A or C. Else, favor Latency or Consistency.
- 如果出现网络分区(Partition), 系统必须在一致性 (Consistency) 和可用性 (Availability) 之间选择;
- 否则(Else), 在延迟 (Latency) 和一致性 (Consistency) 之间权衡。
PACELC 的应用
Amazon DynamoDB:
- 分区情况下选择可用性 (AP)。
- 非分区情况下选择低延迟 (EL)。
Google Spanner:
- 分区情况下选择一致性 (CP)。
- 非分区情况下选择一致性 (EC)。
总结
CAP 定理和 PACELC 模型帮助设计分布式系统时回答以下关键问题:
- 是否优先数据一致性?
- 如果数据必须始终一致,应选择 CP 系统,如金融、订单管理。
- 是否优先可用性?
- 如果系统需要保证高可用性,应选择 AP 系统,如社交平台、缓存。
- 非分区情况下优先一致性还是低延迟?
- 例如,全球范围的数据库系统可能选择牺牲低延迟以实现数据一致性。