CAP和BASE
CAP
- C一致性(Consistency)
在分布式環境下,一致性是指數據在多個副本之間能否保持一致性的特征。
在一致性的需求下,當一個系統在數據一致的狀態下執行更新操作后,應該保證系統的數據仍然處于一致性的狀態。
- A可用性(Availability)
可用性是指系統提供的服務必須一直處于可用的狀態,對于用戶的每一個操作請求總是能夠在有限的時間內返回結果。
有限的時間:指盡可能短的時間內返回處理結果。
返回結果:指在有限的時間內返回正常的結果,不保證返回的是最新的結果。
- P分區容錯性(Partition)
如果是分布式系統,那么就會存在多個節點,就會存在節點故障或網絡故障,所以P是不可避免的。
CAP不能同時滿足:
分布式系統中,如果要保證C一致性,那么就要執行節點數據同步,同步就存在網絡請求故障、邏輯執行耗時等問題,此時就不能保證節點的可用性了。如果要保證A可用性,系統盡可能的快,此時就不能保證網絡請求一定成功、邏輯是否執行完成,此時就不能保證節點的一致性了。所以,在分布式系統中,只能同時滿足AP或者CP。
BASE
- BA(Basically Available)基本可用
犧牲高一致性,獲得可用性和可靠性。
在分布式系統中出現不可預知故障時,允許損失部分可用性(注意,這里不等價于系統不可用)。
比如:
響應時間上的損失:系統故障時請求響應時間由原來的0.5s延長到1s,此時系統仍然可用。
系統功能上的缺失:在系統流量洪峰時為了保證核心功能穩定,將部分消費者引導到一個降級頁面。
- S(Soft state)軟狀態
軟狀態指允許系統中的數據存在中間狀態,并認為該中間狀態不會影響系統的整體可用性,即允許系統各節點數據同步存在延時。
- E(Eventually consistent)最終一致性
系統各節點一定時間后數據最終達到一致狀態。
BASE理論是對CAP中一致性和可用性權衡的結果,其來源于對大規模互聯網系統分布式實踐的總結,是基于CAP理論逐步演化而來的。
BASE理論和傳統的事務ACID特性是相反的,它完全不同于ACID的強一致性模型,在實際的分布式場景中,不同業務和組件對數據一致性要求是不同的,因此在具體的分布式系統中BASE理論和ACID特性是結合一起使用的。
一致性分類
- 強一致性
又稱線性一致性。
任何時刻,任何用戶或節點都可以讀到最近一次成功更新的副本數據,強一致性是程度要求最高的一致性要求。
一個集群要對外提供強一致性,某一個節點數據發生改變,要等到最新數據同步到其他所有節點后,才能對外提供服務。
保證強一致性,務必不能滿足可用性。
- 弱一致性
一旦某個更新成功,用戶無法在一個確定的時間內讀到這次更新的值,且即使在某個副本上讀到了新的值,也不能保證在其他副本上可以讀到新的值。
- 最終一致性
一旦數據更新成功,各個副本上的數據最終達到完全一致的狀態,但達到完全一致狀態所需要的時間不能保證。
- 順序一致性
任何一次讀,都能讀到某個數據的最近一次寫的數據。
對其他節點之前的修改是可見(已同步)且確定的,并且新的寫入建立在已經達成同步的基礎上。