CAP 理論是分散式系統設計的基石,由 Eric Brewer 於 2000 年提出,後經 Seth Gilbert 與 Nancy Lynch 證明。它指出分散式系統最多只能同時滿足三個特性中的兩個:
在分散式環境中,網路不可靠是常態:封包丟失、延遲、分區斷裂隨時發生。既然無法避免網路分區,系統必須具備 P 特性。因此實際選擇只在 CP 與 AP 之間。
特徵:網路分區時,為保證資料一致性,系統拒絕寫入或讀取請求,回傳錯誤或超時。
適用場景:
代表系統:HBase, Redis (單節點/哨兵), ZooKeeper, etcd, Consul (強一致模式)
特徵:網路分區時,系統持續接受讀寫請求,但可能返回舊資料(最終一致性)。
適用場景:
代表系統:Cassandra, DynamoDB, Riak, CouchDB, Redis Cluster (部分模式)
Cassandra、DynamoDB 允許在查詢層面指定一致性等級(QUORUM, ONE, ALL),在 CP 與 AP 之間動態平衡。
主庫 CP(同步複寫),從庫 AP(非同步複寫 + 快取),讀請求路由到從庫。
| 誤區 | 事實 |
|---|---|
| CA 系統存在於分散式環境 | 單機資料庫才是 CA;分散式系統必面臨網路分區,無 CA 選項 |
| CP 系統完全不可用 | 僅在分區發生時部分操作不可用,正常情況下完全可用 |
| AP 系統資料永遠不一致 | 最終一致性:分區修復後會透過反熵、讀修復等機制趨於一致 |
| CAP 是三選二的鐵律 | 是「分區發生時」的取捨;平時可同時擁有 C、A、P |
CAP 僅討論分區發生時的選擇。PACELC 補充:即使沒有分區,系統也面臨 Latency(延遲) 與 Consistency(一致性) 的權衡(ELC)。