CAP 定理 (CAP Theorem)

核心定義

分散式系統中,當網路分區(Partition)發生時,無法同時滿足以下三項

字母 特性 含義
C Consistency(一致性) 所有節點在同一時間看到相同的資料
A Availability(可用性) 每個請求都能在有限時間內獲得回應
P Partition Tolerance(分區容忍) 系統能在網路斷線時繼續運作
關鍵前提

P(分區容忍)幾乎是必選的——網路故障在真實分散式系統中不可避免。
因此實際選擇只在 C vs A 之間取捨。


三種組合

         Consistency
              │
        CP ──┤
              │      ← 真實世界只能這兩個
        AP ──┘
              │
         Availability
組合 保證 犧牲 典型場景
CP 一致性 + 分區容忍 可用性(網路斷線時拒絕請求) 銀行系統、庫存管理、訂票系統
AP 可用性 + 分區容忍 一致性(節點間資料暫時不同) 社群動態、購物車、DNS、CDN
CA 一致性 + 可用性 分區容忍 現實中不存在(網路必然分區)
面試陷阱

「CA 系統」在真實分散式環境中不可能存在。
面試時被問到 CA,要說明這假設網路永遠不斷線,不切實際。


ATM 案例解析

  台北 ATM ──── 網路 ──── 台中 ATM
      └──────── DB ────────┘

  網路斷線時:
  ┌─────────────────────────────────────────┐
  │ CP 選擇:台中 ATM 拒絕服務(保證一致)  │
  │ AP 選擇:台中 ATM 允許提款(保證可用)  │
  │           → 風險:兩邊各領 → 超支       │
  └─────────────────────────────────────────┘

CP vs AP 決策框架

問自己:「暫時不一致會造成嚴重後果嗎?」

嚴重後果(超賣、詐騙、重複預訂)→ 選 CP
可以接受最終一致(過時的貼文、暫時的快取)→ 選 AP

必選 CP 的場景

適合 AP 的場景

面試預設

可用性(AP)是預設選擇
只有題目明確涉及「不能超賣」、「帳戶餘額」、「限量資源」才選 CP。


一致性 vs 可用性的取捨細節

選擇 運作方式 代價
Consistency 寫入後所有節點立刻同步;讀取保證最新值 網路分區時部分節點拒絕服務
Availability 每個節點獨立回應;節點間資料暫時不同 可能讀到舊資料;靠「最終一致性」調和
最終一致性(Eventual Consistency)

AP 系統不是永遠不一致,而是「網路恢復後最終會同步」。
問題在於:無法保證何時完成同步,這段時間可能讀到過期資料。