1. 程式人生 > >【分散式儲存】CAP、BASE與ACID原則

【分散式儲存】CAP、BASE與ACID原則

1. CAP定理

CAP理論:一個分散式系統不可能同時滿足一致性,可用性和分割槽容錯性,最多隻能同時滿足其中的兩項。

1)一致性

對於一個將資料副本分佈在不同分散式節點上的系統來說,如果對第一個節點的資料進行了更新操作並且更新成功後,卻沒有是的第二個節點上的資料得到相應的更新,於是在第二個節點上的資料進行讀取操作時,獲取的依然是舊資料(髒資料),這就是典型的分散式資料不一致的情況。在分散式系統中,如果能夠做到針對一個數據項的更新操作執行成功後,所有的使用者都可以讀取到更新後的值,那麼這樣的系統就被認為具有嚴格的一致性(強一致性)。

2)可用性

可用性是指系統提供的服務必須一直處於可用的狀態,對於使用者的每一個操作請求總是能夠在有限的時間內返回結果。

 
其中有限的時間內是指,對於使用者的一個操作請求,系統必須能夠在指定的時間內返回對應的處理結果,如果超出這個時間範圍,系統則被認為是不可用的。 
返回結果是可用性的一個重要指標,要求系統在完成對使用者請求的處理後,返回一個正常的相應結果。正常的響應結果通常能夠明確的反應出對請求的處理結果,即成功或失敗。

3)分割槽容錯性

分割槽容錯性約束了一個分散式系統需要具有如下特性:分散式系統在遇到任何網路分割槽故障的時候,仍然需要能夠保證對外提供滿足一致性的可用性的服務,除非整個網路環境都發生故障。

CAP定理應用:

放棄CAP定理 說明
放棄P 放棄p的同事也就意味著放棄了系統的可擴充套件性,即儘可能的將所有的資料(或者僅僅是那些與事務相關的資料)都存放在一個分散式節點上。
放棄A 相對於放棄P,放棄可用性則正好相反,其做法是一旦系統遇到網路分割槽或其他故障,那麼受到影響的服務需要等待一定的時間,因此在等待時間內,系統不可用。
放棄C 事實上,放棄一致性指的是放棄資料的強一致性,而保留資料的最終一致性。即雖然資料不能保證實時一致性,但能保證資料最終會達到一個一致的狀態。

2. BASE
理論

BASEBasically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)的簡寫。BASE是對CAP中一致性和可用性權衡的結果,契合性思想是即使無法做到強一致性,但每個應用都可以根據自身的業務特點,採用適當的方式來使得系統達到最終一致性。

1)基本可用

基本可用是指分散式系統在出現不可預知的故障的時候,允許損失部分可用性。 
a
、相應時間上的損失:正常情況下,一個線上搜尋引擎需要在0.5秒之內返回給使用者的查詢結果,但由於出現故障,查詢結果的響應時間增加到1-2秒。 
b
、功能上的損失:正常情況下,在一個電子商務網站上進行購物,消費者幾乎能夠順利的完成每一筆訂單,但是在一些節日大促購物高峰的時候(比如雙十一),由於消費者的購物行為激增,為了保護購物系統的穩定性,部分消費者可能會被引導到一個降級頁面。

2)弱狀態

弱狀態也稱為軟狀態,和硬狀態相對應,是指允許系統中的資料存在中間狀態,並認為該中間狀態的存在不會影響系統的整體可用性,即允許系統在不同的節點之間的資料副本進行資料的同步過程存在延遲。

3)最終一致性

最終一致性強調的是系統中所有的資料副本,在經過一段時間的同步後,最終能夠達到一個一致的狀態。因此,最終一致性的本質就是需要系統最終資料達到一致,而不需要實時保證系統資料的強一致性。在沒有發生故障的前提下,資料達到一致狀態的時間延遲,取決於網路延遲、系統負載和資料複製方案設計等因素。 
在時間工程實踐中,最終一致性存在以下五類主要變種。 
a
、因果一致性 
b
、讀己之所寫 
c
、會話一致性 
d
、單調讀一致性 
e
、單調寫一致性 

3. ACID

所謂ACID指的是事務操作的四個基本特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和永續性(Durability),簡稱事務的ACID特性。

原子性

事務的原子性是指事務必須是一個原子的操作序列單元,事務的各項操作在一次執行過程中,要麼全部成功執行,要麼全部不執行。即任何一項操作失敗都將導致整個事務失敗,同時其他已經執行的操作都將會被撤銷回滾到最初狀態。

一致性

事務的一致性就是說,事務的執行結果必須是使資料庫從一個一致性狀態轉變到另一個一致性狀態,當資料庫只包含成功事務提交的結果時,就能說資料庫處於一致性狀態。

隔離性

事務的隔離性是指在併發環境當中,併發的事務相互不受干擾,不同的事務併發操作相同的資料是時,每個事務都有各自完整的資料空間。

永續性

事務的永續性是指一個事務一旦被提交,他對資料庫中對應的資料狀態變更就必須被永久的儲存下來,即使發生宕機等故障,只要資料庫能夠被重新啟動,資料狀態依舊是被更新後的狀態。

 

總的來說,BASE理論面向的是大型高可用可擴充套件的分散式系統,和傳統事務的ACID特性是相反的,完全不同於ACID的強一致性模型,而是提出通過犧牲強一致性來獲得可用性,並允許資料在一段時間內是不一致的,但最終達到一致狀態。

【轉載】https://blog.csdn.net/qq_24228375/article/details/53002393