CAP 原则是分布式系统设计中的一个核心理论,由 Eric Brewer 提出,指出在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个特性无法同时满足,最多只能实现其中的两个。

CAP 原则的三个要素:

  1. 一致性(Consistency)
    • 所有节点在同一时间看到的数据是相同的。
    • 系统在执行写操作后,任何后续的读操作都能获得最新的数据。
  2. 可用性(Availability)
    • 每个请求都能得到响应,无论成功或失败。
    • 系统在部分节点故障时仍能正常处理请求。
  3. 分区容错性(Partition tolerance)
    • 系统在网络分区(节点间通信中断)的情况下仍能继续运行。
    • 分布式系统必须具备分区容错性,因为网络分区难以避免。

CAP 的权衡:

  • CA(一致性和可用性)
    • 放弃分区容错性,适合单点系统或网络绝对可靠的场景,但分布式系统通常无法保证网络绝对可靠。传统小型企业使用的内部数据库就是如此。
  • CP(一致性和分区容错性)
    • 放弃可用性,确保数据一致性,适合对一致性要求高的场景,如金融系统。在网络分区时,系统可能拒绝请求。
  • AP(可用性和分区容错性)
    • 放弃强一致性,保证高可用性,适合对一致性要求不高的场景,如社交网络。系统在网络分区时仍能响应,但数据可能不一致。