跳至主要內容

18. CAP 定理


18. CAP 定理

CAP 定理(CAP theorem),又被称作布鲁尔定理(Brewer's theorem),由计算机科学家 Eric Brewer 于 2000 年提出,是分布式系统设计的一个重要理论框架。

CAP 代表了 Consistency (一致性)Availability (可用性)Partition Tolerance (分区容错性)

CAP 定理表明,对于一个分布式计算系统来说,不可能同时满足这三个属性,必须在其中进行权衡。

CAP 的三个组成部分

  1. Consistency (一致性):

    • 系统中的所有节点在同一时间看到的数据必须一致。
    • 举例:在一个银行应用中,无论用户访问哪个节点,账户余额应该是相同的。
  2. Availability (可用性):

    • 每个请求都能在有限的时间内得到响应,无论结果是否一致。
    • 举例:即使某些节点无法同步最新数据,系统仍然能够返回一个结果,避免服务不可用。
  3. Partition Tolerance (分区容错性):

    • 系统在出现网络分区时仍然能够继续运行。网络分区是分布式系统中的常见问题,比如节点之间通信失败或延迟过高。
    • 举例:当节点 A 和节点 B 之间的通信断开时,系统应能够继续服务,不至于完全崩溃。

CAP 定理的核心:两难选择

CAP 定理指出,当网络分区(P)发生时,分布式系统必须在一致性(C)和可用性(A)之间做出选择:

  1. Consistency + Partition Tolerance (CP):

    • 优先保证一致性,牺牲一定的可用性。
    • 示例:分布式数据库 MongoDB 中的强一致性模式。
    • 场景:金融交易系统,数据一致性要求高。
  2. 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 的应用

  1. Amazon DynamoDB:

    • 分区情况下选择可用性 (AP)。
    • 非分区情况下选择低延迟 (EL)。
  2. Google Spanner:

    • 分区情况下选择一致性 (CP)。
    • 非分区情况下选择一致性 (EC)。

总结

CAP 定理和 PACELC 模型帮助设计分布式系统时回答以下关键问题:

  1. 是否优先数据一致性?
    • 如果数据必须始终一致,应选择 CP 系统,如金融、订单管理。
  2. 是否优先可用性?
    • 如果系统需要保证高可用性,应选择 AP 系统,如社交平台、缓存。
  3. 非分区情况下优先一致性还是低延迟?
    • 例如,全球范围的数据库系统可能选择牺牲低延迟以实现数据一致性。