logo
System Design Core Concepts

CAP 理论

CAP 理论与 CP / AP 的权衡

CAP theorem 认为:分布式系统只能在 Consistency、Availability、Partition tolerance 三个特性中同时满足两个。

cap-tradeoff

示例

  • 强一致场景:电商下单扣库存,宁愿拒绝请求也不要超卖
  • 高可用场景:聊天/社交 feed,允许短暂旧数据,但系统要持续可用

下面详细看 CAP 中的三个特性:

Consistency

Consistency 意味着所有 client 在同一时间看到相同数据,无论连接哪台 node。为实现这一点,数据写入某个 node 后,必须立即同步/复制到所有 nodes,写入才算“成功”。

Availability

Availability 意味着任何对数据的请求都能得到响应,即使部分 nodes 已经宕机。

Partition tolerance

Partition tolerance 意味着系统能在消息丢失或部分失败时继续工作。具备 partition tolerance 的系统能承受一定网络故障,不导致整体网络不可用。数据会在多个 nodes / networks 组合中充分复制,保证系统在间歇性故障中仍可运行。

Consistency-Availability Tradeoff

现实世界里网络并不稳定,因此分布式系统必须选择 Partition Tolerance (P)。这意味着 Consistency (C) 与 Availability (A) 之间需要取舍。

CA database

CA database 同时保证 consistency 与 availability,但一旦 nodes 之间发生 partition,就无法容错。

Example: PostgreSQL, MariaDB

CP database

CP database 保障 consistency 与 partition tolerance,牺牲 availability。当 nodes 发生 partition 时,系统会关闭不一致的 node,直到恢复同步。

Example: MongoDB, Apache HBase

AP database

AP database 保障 availability 与 partition tolerance,牺牲 consistency。发生 partition 时所有 nodes 仍可用,但部分 nodes 可能返回旧数据;partition 解决后再重新同步。

Example: Apache Cassandra, CouchDB

相关练习题

CAP 理论

暂无相关练习题