Fundamentals
CAP Theorem

What's the CAP Theorem?

CAP 定理(又称为布鲁尔定理)是分布式系统中的一个基本理论,它描述了在分布式系统中不可能同时满足以下三个特性:

  1. C - Consistency(一致性):所有节点访问相同的最新数据。如果一个系统在任意时刻对相同数据的读取总是返回相同的结果,那么这个系统是一致的

  2. A - Availability(可用性):系统的每个请求都能收到一个(非错误的)响应,不保证返回最新的数据。系统始终能够响应读取或写入请求,即使某些节点失败。

  3. P - Partition tolerance(分区容错性):系统能够容忍网络分区。当网络分割为多个无法通信的部分时,系统仍然可以继续工作。即使出现通信中断,系统中的每个部分仍然能够继续对请求做出响应。

CAP 定理的核心观点

根据 CAP 定理,在网络分区发生时,一个分布式系统只能在 一致性可用性 中选择其一,而不能同时满足。也就是说,任何分布式系统在遇到网络分区问题时,必须在一致性和可用性之间进行权衡:

  • 如果选择 一致性,则系统可能拒绝请求(损失可用性),直到分区问题解决并且所有节点都达成一致。
  • 如果选择 可用性,系统将继续响应请求(即便某些节点没有收到更新的数据),但可能会返回过期或不一致的数据。

三个特性权衡的解释

  • CP 系统(Consistency + Partition Tolerance)

  • 在网络分区的情况下,系统保持一致性,但可能会牺牲可用性。也就是说,某些请求可能会被拒绝或延迟,直到分区问题解决。

  • 典型例子:HBaseMongoDB(某些配置)

  • AP 系统(Availability + Partition Tolerance)

  • 在网络分区的情况下,系统保持可用性,但可能会牺牲一致性。也就是说,不同节点上返回的数据可能不一致,但系统依然能提供服务。

  • 典型例子:CassandraDynamoDBCouchbase

  • CA 系统(Consistency + Availability)

  • 在没有网络分区的情况下,可以同时保证一致性和可用性,但在发生网络分区时,系统无法容忍分区。

  • 典型例子:单节点数据库系统

现实中的应用

在分布式系统设计中,网络分区是一个无法避免的现实,因此大多数系统必须在一致性和可用性之间进行取舍。选择 CAP 定理中的某个组合通常取决于应用的需求:

  • 对于金融系统等需要严格一致性的数据系统,选择一致性优先(CP)
  • 对于社交网络、内容交付系统等,通常更看重高可用性,因此选择可用性优先(AP)

CAP 定理帮助我们理解和权衡分布式系统设计中的基本限制,从而根据需求构建合适的架构。