CAP原理
概述
- CAP理論的主要場景是在分布式環境下,在單機環境下,基本可不考慮CAP問題。
- CAP理論就是說在分布式存儲系統中,最多只能實現上面的兩點。而由於當前的網絡硬件肯定會出現延遲丟包等問題,所以分區容忍性是我們必須需要實現的。所以我們只能在一致性和可用性之間進行權衡,沒有NoSQL系統能同時保證這三點。
- 為了保證一致性(CP),不能訪問未同步完成的節點,也就失去了部分可用性;
為了保證可用性(AP),允許讀取所有節點的數據,但是數據可能不一致。
CAP理解
-
Consistency:一致性,原文翻譯過來是說,對於任何從客戶端發達到分布式系統的數據讀取請求,要么讀到最新的數據要么失敗。換句話說,一致性是站在分布式系統的角度,對訪問本系統的客戶端的一種承諾:要么我給您返回一個錯誤,要么我給你返回絕對一致的最新數據,不難看出,其強調的是數據正確。
-
Availability:可用性,原文翻譯過來是說,對於任何求從客戶端發達到分布式系統的數據讀取請求,都一定會收到數據,不會收到錯誤,但不保證客戶端收到的數據一定是最新的數據。換句話說,可用性是站在分布式系統的角度,對訪問本系統的客戶的另一種承諾:我一定會給您返回數據,不會給你返回錯誤,但不保證數據最新,強調的是不出錯。
-
Partition tolerance:分區容忍性,這個詞有點怪,如果直接看中文的確有點不太好理解。那么看原文翻譯怎么說的,分布式系統應該一直持續運行,即使在不同節點間同步數據的時候,出現了大量的數據丟失或者數據同步延遲。
(PS:V,您瞧瞧,包容度多高,簡直是打不死的小強,現在應該能夠理解為什么用tolerance容忍度這個詞了吧。)
換句話說,分區容忍性是站在分布式系統的角度,對訪問本系統的客戶端的再一種承諾:我會一直運行,不管我的內部出現何種數據同步問題,強調的是不掛掉。
BASE理論
- BASE是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫,BASE是對CAP中一致性和可用性權衡的結果,其來源於對大規模互聯網系統分布式實踐的結論,是基於CAP定理逐步演化而來的,其核心思想是即使無法做到強一致性(Strong consistency),但每個應用都可以根據自身的業務特點,采用適當的方式來使系統達到最終一致性(Eventual consistency)
基本可用
- 指分布式系統在出現故障的時候,保證核心可用,允許損失部分可用性。
例如,電商在做促銷時,為了保證購物系統的穩定性,部分消費者可能會被引導到一個降級的頁面。
軟狀態
- 指允許系統中的數據存在中間狀態,並認為該中間狀態不會影響系統整體可用性,即允許系統不同節點的數據副本之間進行同步的過程存在時延
最終一致性
- 最終一致性強調的是系統中所有的數據副本,在經過一段時間的同步后,最終能達到一致的狀態。
ACID 要求強一致性,通常運用在傳統的數據庫系統上。而 BASE 要求最終一致性,通過犧牲強一致性來達到可用性,通常運用在大型分布式系統中。
在實際的分布式場景中,不同業務單元和組件對一致性的要求是不同的,因此 ACID 和 BASE 往往會結合在一起使用