CAP、BASE、ACID
CAP定理
定義
CAP定理(CAP theorem),它指出對於一個分散式計算系統來說,不可能同時滿足以下三點:
- 一致性(Consistency) (等同於所有節點訪問同一份最新的數據副本;寫操作之後的讀操作,必須返回該值)
- 可用性(Availability)(每次請求都能獲取到非錯的響應——但是不保證獲取的數據為最新數據)
- 分區容錯性(Partition tolerance)(以實際效果而言,分區相當於對通訊的時限要求。系統如果不能在時限內達成數據一致性,就意味著發生了分區的情況,必須就當前操作在C和A之間做出選擇。)
根據定理,分散式系統只能滿足三項中的兩項而不可能滿足全部三項。
為什麼不能同時滿足 C、A、P?
在分散式系統中,假設系統有兩個節點分屬兩個分區。
- 允許至少一個節點更新狀態會導致數據不一致,即喪失了C性質。
- 如果為了保證數據一致性,將分區一側的節點設置為不可用,那麼又喪失了A性質。
- 除非兩個節點可以互相通訊(相當於沒有分區),才能既保證C又保證A,這又會導致喪失P性質。
如何取捨及示例
TODO
BASE
定義
BASE是指基本可用(Basically Available)、軟狀態( Soft State)、最終一致性( Eventual Consistency)。
與CAP的關係
BASE是對CAP中一致性和可用性權衡的結果,其來源於對大規模互聯網系統分散式實踐的結論,是基於CAP定理逐步演化而來的,其核心思想是即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,採用適當的方式來使系統達到最終一致性(Eventual consistency)
BASE三要素
- 基本可用(Basically Available):指分散式系統在出現不可預知故障的時候,允許損失部分可用性。
- 響應時間上的損失,原來需要 50ms 響應的介面現在增加到 1-2s
- 功能上的損失,服務降級等
- 弱狀態( Soft State):也稱為軟狀態,和硬狀態相對,是指允許系統中的數據存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同節點的數據副本之間進行數據同步的過程存在延時。
- 最終一致性( Eventual Consistency):強調的是系統中所有的數據副本,在經過一段時間的同步後,最終能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證最終數據能夠達到一致,而不需要實時保證系統數據的強一致性。
ACID
定義
資料庫管理系統(DBMS)在寫入或更新資料的過程中,為保證事務(transaction)是正確可靠的,所必須具備的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)
ACID 與 BASE
ACID是事務的四個基本性質,屬於傳統資料庫常用的設計理念,追求強一致性模型,詳見事務的ACID和四個隔離級別。BASE支援的是大型分散式系統,提出通過犧牲強一致性獲得高可用性(與分區容錯性)。