事務-04-分佈式概念篇ACID&CAP&BASE

1 數據庫ACIDphp

維基百科說明 https://zh.wikipedia.org/wiki/ACIDnode

ACID,是指數據庫管理系統DBMS)在寫入或更新資料的過程當中,爲保證事務(transaction)是正確可靠的,所必須具有的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)。mysql

1.1 Atomicity原子性sql

一個事務(transaction)中的全部操做,要麼所有完成,要麼所有不完成,不會結束在中間某個環節。事務在執行過程當中發生錯誤,會被恢復(Rollback)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。數據庫

1.2 Consistency 一致性網絡

在事務開始以前和事務結束之後,數據庫的完整性沒有被破壞。這表示寫入的資料必須徹底符合全部的預設規則,這包含資料的精確度、串聯性以及後續數據庫能夠自發性地完成預約的工做。架構

1.3 Isolation 隔離性併發

數據庫容許多個併發事務同時對其數據進行讀寫和修改的能力,隔離性能夠防止多個事務併發執行時因爲交叉執行而致使數據的不一致。事務隔離分爲不一樣級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串行化(Serializable)。異步

1.4 durability 持久性分佈式

事務處理結束後,對數據的修改就是永久的,即使系統故障也不會丟失。

 

2 分佈式系統CAP定理

維基百科說明 https://zh.wikipedia.org/wiki/CAP定理

2000年7月,加州大學伯克利分校的Eric Brewer教授在ACM PODC會議上提出CAP猜測。2年後,麻省理工學院的Seth Gilbert和Nancy Lynch從理論上證實了CAP。以後,CAP理論正式成爲分佈式計算領域的公認定理。

CAP理論爲:一個分佈式系統最多隻能同時知足一致性(Consistency)、可用性(Availability)和分區容錯性(Partition tolerance)這三項中的兩項。

2.1 Consistence 一致性

一致性指「all nodes see the same data at the same time」,即更新操做成功並返回客戶端完成後,全部節點在同一時間的數據徹底一致。

2.2 Availability 可用性

可用性指「Reads and writes always succeed」,即服務一直可用,並且是正常響應時間。

2.3 Partition tolerance 分區容錯性

分區容錯性指「the system continues to operate despite arbitrary message loss or failure of part of the system」,即分佈式系統在遇到某節點或網絡分區故障的時候,仍然可以對外提供知足一致性和可用性的服務。

2.4 CAP 權衡

經過CAP理論,咱們知道沒法同時知足一致性、可用性和分區容錯性這三個特性,那要捨棄哪一個呢?

對於多數大型互聯網應用的場景,主機衆多、部署分散,並且如今的集羣規模愈來愈大,因此節點故障、網絡故障是常態,並且要保證服務可用性達到N個9,即保證P和A,捨棄C(退而求其次保證最終一致性)。雖然某些地方會影響客戶體驗,但沒達到形成用戶流程的嚴重程度。

對於涉及到錢財這樣不能有一絲讓步的場景,C必須保證。網絡發生故障寧肯中止服務,這是保證CA,捨棄P。貌似這幾年國內銀行業發生了不下10起事故,但影響面不大,報到也很少,廣大羣衆知道的少。還有一種是保證CP,捨棄A。例如網絡故障事只讀不寫。

孰優孰略,沒有定論,只能根據場景定奪,適合的纔是最好的。

 

3、分佈式BASE理論

eBay的架構師Dan Pritchett源於對大規模分佈式系統的實踐總結,在ACM上發表文章提出BASE理論,BASE理論是對CAP理論的延伸,核心思想是即便沒法作到強一致性(Strong Consistency,CAP的一致性就是強一致性),但應用能夠採用適合的方式達到最終一致性(Eventual Consitency)。

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

3.1 基本可用(Basically Available)

基本可用是指分佈式系統在出現故障的時候,容許損失部分可用性,即保證核心可用。
電商大促時,爲了應對訪問量激增,部分用戶可能會被引導到降級頁面,服務層也可能只提供降級服務。這就是損失部分可用性的體現。

3.2 軟狀態( Soft State)

軟狀態是指容許系統存在中間狀態,而該中間狀態不會影響系統總體可用性。分佈式存儲中通常一份數據至少會有三個副本,容許不一樣節點間副本同步的延時就是軟狀態的體現。mysql replication的異步複製也是一種體現。

3.3 最終一致性( Eventual Consistency)

最終一致性是指系統中的全部數據副本通過必定時間後,最終可以達到一致的狀態。弱一致性和強一致性相反,最終一致性是弱一致性的一種特殊狀況。

 

四、ACID和BASE的區別與聯繫

ACID是傳統數據庫經常使用的設計理念,追求強一致性模型。BASE支持的是大型分佈式系統,提出經過犧牲強一致性得到高可用性。

ACID和BASE表明了兩種截然相反的設計哲學

在分佈式系統設計的場景中,系統組件對一致性要求是不一樣的,所以ACID和BASE又會結合使用。

相關文章
相關標籤/搜索