CAP、BASE、ACID基本概念

1、事務的ACID

  • 原子性(Atomicity):指的是操作,事務是一個不可分割的工作單位,事務中的操作要麼都發生,要麼都不發生。
  • 一致性(Consistency):指的是狀態,系統或者數據庫從一種正確的狀態到達另一種正確的狀態。比如A、B賬戶有100塊,A向B轉20,成功後,他們賬戶總額應該還是100塊。
  • 隔離性(Isolation):多個事務同時執行時,各事務內的數據只對內部修改可見,事務之間不能相互干擾。
  • 持久性(Durability):事務一旦提交後,數據庫中的數據改變是永久的。

 

2、BASE理論

BASE:全稱:Basically Available(基本可用),Soft state(軟狀態),和 Eventually consistent(最終一致性)三個短語的縮寫。

BA指的是基本業務可用性,支持分區失敗,S表示柔性狀態,也就是允許短時間內不同步,E表示最終一致性,數據最終是一致的,但是實時是不一致的。原子性和持久性必須從根本上保障,爲了可用性、性能和服務降級的需要,只有降低一致性和隔離性的要求

 

3、CAP理論

  • 一致性Consistency

對某個指定的客戶端來說,讀操作保證能返回最新的寫操作結果。

  • 可用性Availability

非故障的節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)。

這個定義中有三個注意的點即非故障節點、合理的時間內、合理的響應。
只有非故障節點才能滿足業務正常;只有在合理的時間內,用戶才能接受;只有返回合理的響應,用戶才能接受。

  • 分區容錯性Partition tolerance

分佈式系統都分佈在多個子網絡。每個子網絡就叫做一個區(partition)。分區容錯的意思是,區間通信可能失敗。比如,一臺服務器放在中國,另一臺服務器放在美國,這就是兩個區,它們之間可能無法通信。

一般來說,分區容錯無法避免,因此可以認爲 CAP 的 P 總是成立。

CA without P

這種情況在分佈式系統中幾乎是不存在的。首先在分佈式環境下,網絡分區是一個自然的事實。因爲分區是必然的,所以如果捨棄P,意味着要捨棄分佈式系統。那也就沒有必要再討論CAP理論了。這也是爲什麼在前面的CAP證明中,我們以系統滿足P爲前提論述了無法同時滿足C和A。

比如我們熟知的關係型數據庫,如My Sql和Oracle就是保證了可用性和數據一致性,但是他並不是個分佈式系統。一旦關係型數據庫要考慮主備同步、集羣部署等就必須要把P也考慮進來。

 

CP without A

如果一個分佈式系統不要求強的可用性,即容許系統停機或者長時間無響應的話,就可以在CAP三者中保障CP而捨棄A。

一個保證了CP而一個捨棄了A的分佈式系統,一旦發生網絡故障或者消息丟失等情況,就要犧牲用戶的體驗,等待所有數據全部一致了之後再讓用戶訪問系統。

設計成CP的系統其實也不少,其中最典型的就是很多分佈式數據庫,他們都是設計成CP的。在發生極端情況時,優先保證數據的強一致性,代價就是捨棄系統的可用性。如Redis、HBase等,還有分佈式系統中常用的Zookeeper也是在CAP三者之中選擇優先保證CP的。

 

AP wihtout C

要高可用並允許分區,則需放棄一致性。一旦網絡問題發生,節點之間可能會失去聯繫。爲了保證高可用,需要在用戶訪問時可以馬上得到返回,則每個節點只能用本地數據提供服務,而這樣會導致全局數據的不一致性。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章