天天看點

架構方案(15) 詳解分布式一緻性ACID、CAP、BASE,以及差別分布式一緻性的背景分布式資料一緻性的由來分布式資料一緻性的級别CAP理論BASE理論

分布式一緻性的背景

随着分布式事務的出現,傳統的單機事務模型(ACID)已經無法勝任,尤其是對于一個高通路量、高并發的網際網路分布式系統來說。

如果我們要求嚴格一緻性,很可能就需要犧牲掉系統的可用性,反之亦然。

如何建構一個兼顧可用性和一緻性的分布式系統成為了無數Java工程師探讨的難題。

架構方案(15) 詳解分布式一緻性ACID、CAP、BASE,以及差別分布式一緻性的背景分布式資料一緻性的由來分布式資料一緻性的級别CAP理論BASE理論

分布式資料一緻性的由來

一緻性(Consistency)一直是分布式系統裡一個很重要的話題。

在存儲系統中,為了避免資料丢失,我們都會對資料進行持久化。

架構方案(15) 詳解分布式一緻性ACID、CAP、BASE,以及差別分布式一緻性的背景分布式資料一緻性的由來分布式資料一緻性的級别CAP理論BASE理論

對資料進行持久化可以避免當機帶來的資料丢失問題,但是不能解決單機永久性故障的問題。存儲系統作為基礎設施,在單機上持久化是遠遠不夠的,我們需要将資料複制到多台機器上以提升系統的可用性和可靠性。

架構方案(15) 詳解分布式一緻性ACID、CAP、BASE,以及差別分布式一緻性的背景分布式資料一緻性的由來分布式資料一緻性的級别CAP理論BASE理論

一旦資料被複制到多個節點,那麼就産生了一緻性的問題。

架構方案(15) 詳解分布式一緻性ACID、CAP、BASE,以及差別分布式一緻性的背景分布式資料一緻性的由來分布式資料一緻性的級别CAP理論BASE理論

分布式資料一緻性的級别

1、強一緻性

是最強的一緻性模型,要求任何讀取操作都能讀取到最新的值,換句話說,要求任何寫入操作立即同步給所有程序。

2、弱一緻性

這種一緻性級别限制了系統在寫入成功後,不承諾立即可以讀到寫入的值,也不久承諾多久之後資料能夠達到一緻,但會盡可能地保證到某個時間級别(比如秒級别)後,資料能夠達到一緻狀态。

3、最終一緻性

最終一緻性是弱一緻性的一個特例,系統會保證在一定時間内,能夠達到一個資料一緻的狀态。

這裡之是以将最終一緻性單獨提出來,是因為它是弱一緻性中非常推崇的一種一緻性模型,也是業界在大型分布式系統的資料一緻性上比較推崇的模型。

04

一緻性相關的理論

ACID

ACID是資料庫(MySQL)事務正确執行所必須滿足的四個特性的首字母縮寫。

1.Atomicity(原子性)

一個事務的所有操作,要麼全部完成,要麼全部不完成。

所謂事務,是指由一系列資料操作所組成的完整邏輯過程。比如銀行轉賬事務由兩個操作組成:從源賬戶扣除金額,以及向目标賬戶增加金額。

2.Consistency(一緻性)

指事務開始之前和事務結束之後,資料的完整性限制沒有被破壞。

包含兩層含義:

a)資料庫機制層面,事務執行前後,資料能符合設定的限制,如唯一限制、外鍵限制;

b)業務層面,由應用開發人員保證業務一緻性。還是以銀行轉賬為例,A、B兩個賬号,轉賬之前和之後,A、B兩個賬号餘額總額必須一緻。

3.Isolation(隔離性)

資料庫能夠防止由于多個并發事務交叉執行而導緻資料的不一緻。

4.Durability(持久性)

指事務結束後,對資料的修改是永久的,不會復原到之前的狀态。

CAP理論

在分布式系統中,也有類似資料庫ACID的特性,那就是CAP,他們分别是:

1.Consistency 一緻性

強調進群節點中資料一緻。在分布式中一緻性又包括強一緻性和弱一緻性,強一緻性就是指在任何時刻任何節點看到的資料都是一樣的;

弱一緻性一般實作是最終一緻性,即剛開始可能存在差異,但随着時間的推移,最終資料保持一緻。

2.Availability 可用性

強調叢集在任何時間内都正常使用

3.Partition Tolerance 分區容錯性

即使某一部分叢集壞掉,另一部分仍能正常工作。

這三個特性隻能滿足其中兩個,犧牲另一個。大部分系統也都是如此:

一般來說分布式叢集都會保證P優先,即叢集部分節點壞死不影響整個叢集的使用,然後再去追求C和A。因為如果放棄P——分區可用性,那不如就直接使用多個傳統資料庫了。事實上,很多微服務分庫分表就是這個道理。

如果追求強一緻性,那麼勢必會導緻可用性下降。比如在Master-Slave的場景中,Master負責資料寫入,然後分發給各個節點,所有節點都寫入成功,才算寫入,這樣保證了強一緻性,但是延遲也會随之增加,導緻可用性降低。

是以在可用性和一緻性之間,就出現了各種解決方案,如時序一緻性、最終一緻性等等。

BASE理論

BASE理論是對CAP理論的延伸,核心思想是即使無法做到強一緻性(Strong Consistency,CAP的一緻性就是強一緻性),但應用可以采用适合的方式達到最終一緻性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、軟狀态( Soft State)、最終一緻性( Eventual Consistency)。

1.基本可用(Basically Available)

基本可用是指分布式系統在出現故障的時候,允許損失部分可用性,即保證核心可用。

電商大促時,為了應對通路量激增,部分使用者可能會被引導到降級頁面,服務層也可能隻提供降級服務。這就是損失部分可用性的展現。

2.軟狀态( Soft State)

軟狀态是指允許系統存在中間狀态,而該中間狀态不會影響系統整體可用性。

分布式存儲中一般一份資料至少會有三個副本,允許不同節點間副本同步的延時就是軟狀态的展現。mysql replication的異步複制也是一種展現。

3.最終一緻性( Eventual Consistency)

最終一緻性是指系統中的所有資料副本經過一定時間後,最終能夠達到一緻的狀态。弱一緻性和強一緻性相反,最終一緻性是弱一緻性的一種特殊情況。

BASE和ACID代表兩種截然相反的設計理念,ACID注重一緻性,是傳統關系型資料庫(MySQL)的設計思路,BASE關注高可用性。

當今大規模、跨資料中心的分布式系統(如雲計算)大多同時采用這兩種設計理念,并在兩者之間尋求平衡。

繼續閱讀