什麼是 CAP 定理#
CAP 定理指出,分散式系統不可能同時滿足以下三項保證中的兩項以上:
- Consistency(一致性):所有節點在同一時間看到相同的資料。透過在允許讀取之前先更新多個節點來達成一致性
- Availability(可用性):每個請求都能收到成功或失敗的回應。透過在不同伺服器間複製資料來達成可用性
- Partition Tolerance(分區容錯性):即使發生訊息遺失或部分節點故障,系統仍能繼續運作。具備分區容錯性的系統能承受任何不會導致整個網路故障的網路故障,資料在節點和網路的各種組合中充分複製,以確保系統在間歇性中斷時仍能正常運作

圖 9.1:CAP 定理韋恩圖
為什麼只能三選二#
我們無法建構一個同時具備持續可用、順序一致且容忍任何分區故障的通用資料儲存系統,只能在這三項屬性中選擇其中兩項。
原因在於:
- 要達成一致性,所有節點必須以相同的順序看到相同的更新
- 但如果網路發生分區,某個分區中的更新可能無法及時傳遞到其他分區
- 此時用戶端可能先從已更新的分區讀取資料,再從過期的分區讀取,導致資料不一致
- 唯一的解決辦法是停止從過期分區提供服務,但這樣系統就不再是 100% 可用
在設計分散式系統時,CAP 之間的取捨幾乎是首先需要考慮的事情。