架構學習-2-CAP理論第二版

一、定義
 
在一個分佈式系統(指互相連接並共享數據的節點的集合)中,當涉及讀寫操作時,只能保證一致性(Consistence)、可用性(Availability)、分區容錯性(Partition Tolerance)三者中的兩個,另外一個必須被犧牲。
 
1. 一致性(Consistency)
 
對某個指定的客戶端來說,讀操作保證能夠返回最新的寫操作結果。
 
2. 可用性(Availability)
非故障的節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)。
 
3. 分區容忍性(Partition Tolerance)
當出現網絡分區後,系統能夠繼續“履行職責”。
 
(P要求分佈式和數據同步,C要求數據完全一致,A要求返回及時)
 
CAP 應用
 
雖然 CAP 理論定義是三個要素中只能取兩個,但放到分佈式環境下來思考,我們會發現必須選擇 P(分區容忍)要素,因爲網絡本身無法做到 100% 可靠,有可能出故障,所以分區是一個必然的現象。如果我們選擇了 CA 而放棄了 P,那麼當發生分區現象時,爲了保證 C,系統需要禁止寫入,當有寫入請求時,系統返回 error(例如,當前系統不允許寫入),這又和 A 衝突了,因爲 A 要求返回 no error 和 no timeout。因此,分佈式系統理論上不可能選擇 CA 架構,只能選擇 CP 或者 AP 架構。
 
1.CP - Consistency/Partition Tolerance
如下圖所示,爲了保證一致性,當發生分區現象後,N1 節點上的數據已經更新到 y,但由於 N1 和 N2 之間的複製通道中斷,數據 y 無法同步到 N2,N2 節點上的數據還是 x。這時客戶端 C 訪問 N2 時,N2 需要返回 Error,提示客戶端 C“系統現在發生了錯誤”,這種處理方式違背了可用性(Availability)的要求,因此 CAP 三者只能滿足 CP。
 
 

 

 

 
2.AP - Availability/Partition Tolerance
 
如下圖所示,爲了保證可用性,當發生分區現象後,N1 節點上的數據已經更新到 y,但由於 N1 和 N2 之間的複製通道中斷,數據 y 無法同步到 N2,N2 節點上的數據還是 x。這時客戶端 C 訪問 N2 時,N2 將當前自己擁有的數據 x 返回給客戶端 C 了,而實際上當前最新的數據已經是 y 了,這就不滿足一致性(Consistency)的要求了,因此 CAP 三者只能滿足 AP。注意:這裏 N2 節點返回 x,雖然不是一個“正確”的結果,但是一個“合理”的結果,因爲 x 是舊的數據,並不是一個錯亂的值,只是不是最新的數據而已。
 

 

 

 
 
二、CAP 關鍵細節點
 
1、CAP 關注的粒度是數據,而不是整個系統。
2、在實際設計過程中,每個系統不可能只處理一種數據,而是包含多種類型的數據,有的數據必須選擇 CP,有的數據必須選擇 AP。
3、CAP 是忽略網絡延遲的。
4、正常運行情況下,不存在 CP 和 AP 的選擇,可以同時滿足 CA。
 
三、與ACID的區別
 
<一>、 ACID的定義
ACID 是數據庫管理系統爲了保證事務的正確性而提出來的一個理論。ACID 包含四個約束:
 
1.Atomicity(原子性)一個事務中的所有操作,要麼全部完成,要麼全部不完成,不會在中間某個環節結束。事務在執行過程中發生錯誤,會被回滾到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
 
2.Consistency(一致性)在事務開始之前和事務結束以後,數據庫的完整性沒有被破壞。
3.Isolation(隔離性)數據庫允許多個併發事務同時對數據進行讀寫和修改的能力。隔離性可以防止多個事務併發執行時由於交叉執行而導致數據的不一致。事務隔離分爲不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。
 
4.Durability(持久性)事務處理結束後,對數據的修改就是永久的,即便系統故障也不會丟失。
 
 
<二>、區別
可以看到,ACID 中的 A(Atomicity)和 CAP 中的 A(Availability)意義完全不同,而 ACID 中的 C 和 CAP 中的 C 名稱雖然都是一致性,但含義也完全不一樣。ACID 中的 C 是指數據庫的數據完整性,而 CAP 中的 C 是指分佈式節點中的數據一致性。再結合 ACID 的應用場景是數據庫事務,CAP 關注的是分佈式系統數據讀寫這個差異點來看,其實 CAP 和 ACID 的對比就類似關公戰秦瓊,雖然關公和秦瓊都是武將,但其實沒有太多可比性。
 
 
四、與BASE理論的區別
 
<一>、BASE理論定義
 
BASE 是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency),核心思想是即使無法做到強一致性(CAP 的一致性就是強一致性),但應用可以採用適合的方式達到最終一致性。
 
1. 基本可用(Basically Available)分佈式系統在出現故障時,允許損失部分可用性,即保證核心可用。
2. 軟狀態(Soft State)允許系統存在中間狀態,而該中間狀態不會影響系統整體可用性。這裏的中間狀態就是 CAP 理論中的數據不一致。
3. 最終一致性(Eventual Consistency)系統中的所有數據副本經過一定時間後,最終能夠達到一致的狀態。
 
<二>、區別
 
BASE 理論本質上是對 CAP 的延伸和補充,更具體地說,是對 CAP 中 AP 方案的一個補充。前面在剖析 CAP 理論時,提到了其實和 BASE 相關的兩點:
 
1、CAP 理論是忽略延時的,而實際應用中延時是無法避免的。這一點就意味着完美的 CP 場景是不存在的,即使是幾毫秒的數據複製延遲,在這幾毫秒時間間隔內,系統是不符合 CP 要求的。因此 CAP 中的 CP 方案,實際上也是實現了最終一致性,只是“一定時間”是指幾毫秒而已。
 
2、AP 方案中犧牲一致性只是指分區期間,而不是永遠放棄一致性。這一點其實就是 BASE 理論延伸的地方,分區期間犧牲一致性,但分區故障恢復後,系統應該達到最終一致性。
 
綜合上面的分析,ACID 是數據庫事務完整性的理論,CAP 是分佈式系統設計理論,BASE 是 CAP 理論中 AP 方案的延伸。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章