什麼是 CAP 理論?

2023年2月5日

💎 加入 E+ 成長計畫 與超過 300+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

什麼是 CAP 理論?

CAP 理論是指在一個分散式系統中,當涉及讀寫操作時,只能保證一制性(Consistence)、可用性(Availability)、分區容錯性(Partition Tolerance)三者中的兩個,剩下的一個必須被犧牲。

  • 一制性 Consistency:對某個 Client 來說,讀操作保證能夠返回最新寫操作的結果。
  • 可用性 Availability:非故障節點能在合理的時間內返回合理地響應(不是錯誤和超時的響應)。
  • 分區容錯性 Partition Tolerance:當出現分區時(封包遺失、連接中斷、塞車等),系統能夠繼續履行職責(返回 Reasonable Response)。

CAP 的應用

在分散式系統中,必然會需要選擇 P ,因為網路本身不可能做到 100% 可靠,因此可能的系統可能是 AP 或者是 CP

  • CP:當兩節點 Node 1 將 A 更新為 1 ,當 Node 1 欲將 A 複製到 Node 2 時發生錯誤 ,則 Client 重新在 Node 2 讀取 A 值時,因為為了確保 Consistency ,所以會得到 Error
CAP Theorem: CP
CAP Theorem: CP
  • AP:當兩節點 Node 1 將 A 更新為 1 ,當 Node 1 欲將 A 複製到 Node 2 時發生錯誤 ,則 Client 重新在 Node 2 讀取 A 值時,因為為了確保 Availability,所以會得到舊的值 0
CAP Theorem: AP
CAP Theorem: AP

CAP 的細節

  1. CAP 的關注點是數據 每當討論 CAP 時,通常都是以系統、節點的方式來討論,以至於會誤以為系統架構要馬選擇 AP ,要馬選擇 CP ,但其實是要以數據的角度來看,因此每一個系統有不同的數據就可以選擇不同策略,某些數據使用 AP ,某些數據則使用 CP

  2. CAP 是忽略網路延遲的 在資料的複製過程中,一定會有網路延遲,短則幾毫秒,長則幾時毫秒,因此在複製的過程中會有短暫的不一致問題,因此在某些情況下,是做不到 CP 的,例如:用戶餘額、商品庫存等,這種業務上需要做到一致性的,最終只能做到 CA ,也就代表只能做到單點寫入,其他節點做備份,無法做到分散式的多點寫入。

  3. 正常狀況不存在 CPAP 時,則可以滿足 CA 在分散式系統中,通常只能選擇 CPAP ,但也需要同時考慮當 P 沒有發生時,要如何保證 CA 。例如:用戶的數據可以用 Message Queue 來實現 CA

  4. 放棄並不等於什麼都不做

    系統不會一直都處於錯誤的狀態,但錯誤還是有可能發生,因此需要為錯誤發生後要怎麼恢復來做準備,舉例來說,用戶管理系統一開始選擇了 CP ,當分區發生後,節點一可以註冊新帳戶,節點二無法註冊新帳戶(不滿足 A ),當分區發生故障時( P 失效時),節點一會先將紀錄存在 Log 裡,分區恢復後再將資料同步到節點二。所以對於節點一而言,目前是 CA 狀態。

🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們