CAP 原则是分布式系统设计中的一个核心理论,由 Eric Brewer 提出,指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个特性无法同时满足,最多只能实现其中的两个。
CAP 原则的三个要素:
- 一致性(Consistency):
- 所有节点在同一时间看到的数据是相同的。
- 系统在执行写操作后,任何后续的读操作都能获得最新的数据。
- 可用性(Availability):
- 每个请求都能得到响应,无论成功或失败。
- 系统在部分节点故障时仍能正常处理请求。
- 分区容错性(Partition tolerance):
- 系统在网络分区(节点间通信中断)的情况下仍能继续运行。
- 分布式系统必须具备分区容错性,因为网络分区难以避免。
CAP 的权衡:
- CA(一致性和可用性):
- 放弃分区容错性,适合单点系统或网络绝对可靠的场景,但分布式系统通常无法保证网络绝对可靠。传统小型企业使用的内部数据库就是如此。
- CP(一致性和分区容错性):
- 放弃可用性,确保数据一致性,适合对一致性要求高的场景,如金融系统。在网络分区时,系统可能拒绝请求。
- AP(可用性和分区容错性):
- 放弃强一致性,保证高可用性,适合对一致性要求不高的场景,如社交网络。系统在网络分区时仍能响应,但数据可能不一致。