什麼是 CAP 理論?
2023年2月5日
什麼是 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
。
- AP:當兩節點 Node 1 將
A
更新為1
,當 Node 1 欲將A
複製到 Node 2 時發生錯誤 ,則 Client 重新在 Node 2 讀取A
值時,因為為了確保 Availability,所以會得到舊的值0
。
CAP 的細節
CAP 的關注點是數據 每當討論 CAP 時,通常都是以系統、節點的方式來討論,以至於會誤以為系統架構要馬選擇
AP
,要馬選擇CP
,但其實是要以數據的角度來看,因此每一個系統有不同的數據就可以選擇不同策略,某些數據使用AP
,某些數據則使用CP
。CAP 是忽略網路延遲的 在資料的複製過程中,一定會有網路延遲,短則幾毫秒,長則幾時毫秒,因此在複製的過程中會有短暫的不一致問題,因此在某些情況下,是做不到
CP
的,例如:用戶餘額、商品庫存等,這種業務上需要做到一致性的,最終只能做到CA
,也就代表只能做到單點寫入,其他節點做備份,無法做到分散式的多點寫入。正常狀況不存在
CP
和AP
時,則可以滿足CA
在分散式系統中,通常只能選擇CP
和AP
,但也需要同時考慮當P
沒有發生時,要如何保證CA
。例如:用戶的數據可以用 Message Queue 來實現CA
。放棄並不等於什麼都不做
系統不會一直都處於錯誤的狀態,但錯誤還是有可能發生,因此需要為錯誤發生後要怎麼恢復來做準備,舉例來說,用戶管理系統一開始選擇了
CP
,當分區發生後,節點一可以註冊新帳戶,節點二無法註冊新帳戶(不滿足A
),當分區發生故障時(P
失效時),節點一會先將紀錄存在 Log 裡,分區恢復後再將資料同步到節點二。所以對於節點一而言,目前是CA
狀態。