從分布式事務到CAP理論和BASE理論


前言

我在《數據庫事務和事務的隔離級別》和《再談數據庫事務隔離級別》兩篇文章中詳細介紹了數據庫事務的隔離級別。本文將會從分布式的事務開始談起,以及CAP理論和BASE理論。

分布式事務

隨着分布式計算的發展,事務在分布式計算領域中也得到了廣泛的應用。在單機數據庫中,我們很容易能夠實現一套滿足ACID特性的事務處理系統,但是在分布式數據庫中,數據分散在各台不同的機器上,如何對這些數據進行分布式事務處理具有非常大的挑戰。

分布式事務是指事務的參與者,支持事務的服務器,資源服務器以及事務管理器分別位於分布式系統的不同節點之上,通常一個分布式事務中會涉及對多個數據源或者業務系統的操作。

我們可以設想一下最典型的的分布式事務場景。一個跨銀行轉賬的操作,比如從建行的賬戶轉賬到農行的賬戶上,這一個操作包含需要調用分布式中兩個不同節點上的服務1.取款服務2.目標賬戶的存款服務。這兩個服務之間是無狀態並且是相互保持獨立的,共同構成一個完成的分布式事務。  如果調用第一個取款服務成功,而再目標賬戶的存款服務時因為某一種原因導致調用失敗了,那么就必須要全部回滾到取款之前的狀態,否則,用戶會發現,賬戶中的錢不翼而飛。

一個分布式事務可以看做是由多個分布式的操作序列組成的。我們把這些操作序列叫做子事務。因此分布式事務也可以被叫做嵌套性的事務,同時也就具有ACID的事務特性。但是在分布式事務中,各個子事務的執行是分布式的。因此我們要實現能夠保證ACID特性的分布式事務就變得很難很難。

 

在一套搞訪問量,高並發的分布式系統下,如果想要去實現一個嚴格的ACID特性的分布式事務,那就會造成系統的可用性和嚴格一致性的沖突,嚴格的一致性,就意味着需要犧牲掉系統的可用性。因此在可用性和嚴格一致性存在着不能兼顧的難題,於是就cap和base這樣的理論。

 

CAP理論

來自加州大學伯克利分校的Eric Brewer教授,這位教授好像很厲害的樣子,據說是加州大學伯克利分校的終身教授,他首次提出了著名的cap猜想。后來,來自麻省理工學院的Seth Gilbert和Nancy Lynch從理論上證明了這個猜想,從此出現了公認的cap定理:一個分布式系統不可能同時滿足一致性[Consistency],可用性[Availability],和分區容錯性[Partition tolerance]這三個基本需求,最多只能同時滿足其中的兩項

①一致性。

一致性是指數據在多個副本之間是否能夠保持一致的特性。假如現在的多個結點中的數據是保持一致的,當執行完某一個更新操作之后,應當要保證系統的數據然后處於一致性的狀態。

對於一個將數據副本分布在不同的分布式節點上,如果對第一個結點的數據進行了更新的操作,並且更新成功之后,卻沒有讓第二個節點得到相應的更新。當外部系統再去調用第二個節點時,獲取到的依然是原始的數據,這就是分布式數據不一致的情況了。在分布式系統中,如果能夠做到針對一個數據項更新操作執行成功之后,所有的用戶都可以讀取到最新的值,那么這樣的系統就被認為是具有強一致性的。

②可用性。

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

有限的時間內:對於用戶的一個操作請求,系統必須能夠在指定的時間內返回對應的結果。如果超過了這個時間,就認為系統是不可用的。

返回結果是可用性的一個非常重要的指標,它要求系統在完成對用戶請求的處理后,返回一個正常的響應結果。正常的響應結果包含成功或失敗,而不是一個讓用戶迷惑的結果。

③分區容錯性。

 分布式系統在遇到任何網絡分區故障的時候,仍然需要對外提供滿足一致性和可用性的服務。

 

cap定理示意圖:我從proccesson模板上找到現成的一張圖。

一個分布式系統既然不能同時滿足上述的三個需求,因此在進行對cap定理的應用時,我們就需要去拋棄一項。

①選擇CA

放棄分區容錯性,比較簡單的方式就是把所有的數據都放在一個分布式節點上。那不就又成為了單機應用了嗎?

②選擇CP

放棄可用性,一旦出現網絡故障,受到影響的服務需要再等待一定時間,因為系統處於不可用的狀態。

③選擇AP 

放棄一致性,這里所指的一致性是強一致性,但是確保最終一致性。是很多分布式系統的選擇。

 小結:從cap的定理可以看出,分區容錯性是一個最基本的要求,因為既然是一個分布式系統,必然要部署到兩個或兩個以上的節點上,否則,就不是分布式系統,因此我們只能在一致性和可用性尋求平衡。

 

BASE理論

base是Basically Available(基本可用)、Soft state(軟狀態)和Eventually consistent(最終一致性)三個短語的簡寫。base是對cap中一致性和可用性的權衡的結果。是根據cao理論演變而來,核心思想是即使無法做到強一致性,但是每個應用根據自身的業務特點,采用適當的方式來使系統達到最終與執行。

①基本可用

基本可用指的是分布式系統出現了不可預知故障的時候,允許損失部分可用性。響應時間合理延長,功能上適當做服務降級。

②弱狀態

弱狀態指的是允許系統中的數據存在中間狀態,並認為該中間狀態不會永祥系統的整體可用性,即允許在各個節點數據同步時存在延時。

③最終一致性

最終一致性強調的是系統中所有的數據副本,在經過一點時間 的同步之后,最終能夠達到一個一致的狀態。因此,最終一致性的本質是需要系統保證數據最終能夠達到一致。而不需要實時保證系統數據的一致性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM