CAP理论
CAP 是分布式系统中的一个重要理论,由计算机科学家 Eric Brewer 提出,被称为 CAP 定理(也称 CAP 理论)
什么是CAP?
CAP是三个单词的缩写
| 缩写 | 含义 | 说明 |
|---|---|---|
| C | Consistency(一致性) | 所有节点在同一时间看到的数据是一致的。即:写操作完成后,后续所有读操作都能读到最新的值。 |
| A | Availability(可用性) | 系统始终能够在合理时间内返回非错误的响应(不保证是最新的),即使部分节点故障。 |
| P | Partition Tolerance(分区容错性) | 系统在部分节点之间网络通信失败(即发生“网络分区”)时,仍能继续运行。 |
CAP 定理的核心观点
一个分布式系统最多只能同时满足三项中的两项。
也就是说,在面对网络分区(P)时,你必须在一致性(C)和可用性(A)之间做出选择:
- CA:放弃 P → 不是真正的分布式系统(假设网络永远可靠)
- CP:放弃 A → 网络分区时拒绝请求,保证数据一致
- AP:放弃 C → 网络分区时继续提供服务,但数据可能不一致
在分布式系统中,P(分区容错性)是必须的,因为网络不可靠。因此,实际选择往往是在 CP vs AP 之间。
例子
假设有两个服务器(A 和 B),数据需要同步。突然 A 和 B 之间的网络断了(发生 网络分区):
场景 1:选择 CP(一致性和分区容错性)
- 客户端向 A 写入新数据。
- 但由于 A 无法与 B 同步,为了保持一致性,A 拒绝写入。
- ❌ 服务不可用(牺牲 A)
- ✅ 保证数据一致(C)
场景 2:选择 AP(可用性和分区容错性)
- 客户端向 A 写入新数据,A 接受写入并返回成功。
- B 由于网络断开,数据未更新。
- ✅ 服务可用(A)
- ❌ 数据不一致(牺牲 C)
总结
| 选择 | 特点 | 适用场景 |
|---|---|---|
| CP | 保证一致,可能拒绝服务 | 金融、账务、注册中心 |
| AP | 保证可用,允许短暂不一致 | 社交、评论、购物车 |