高併發架構系列:詳解分散式一致性ACID、CAP、BASE及區別
在面試環節,經常會問CAP、BASE等相關的分散式理論,其實這些名詞主要還是來自於分散式的一致性,今天主要介紹分散式一致性:強一致性、最終一致性、ACID、CAP等理論。
分散式一致性的背景
隨著分散式事務的出現,傳統的單機事務模型(ACID)已經無法勝任,尤其是對於一個高訪問量、高併發的網際網路分散式系統來說。
如果我們要求嚴格一致性,很可能就需要犧牲掉系統的可用性,反之亦然。
如何構建一個兼顧可用性和一致性的分散式系統成為了無數Java工程師探討的難題。
資料一致性的由來
一致性(Consistency)一直是分散式系統裡一個很重要的話題。
在儲存系統中,為了避免資料丟失,我們都會對資料進行持久化。
對資料進行持久化可以避免當機帶來的資料丟失問題,但是不能解決單機永久性故障的問題。儲存系統作為基礎設施,在單機上持久化是遠遠不夠的,我們需要將資料複製到多臺機器上以提升系統的可用性和可靠性。
一旦資料被複制到多個節點,那麼就產生了一致性的問題。
分散式資料一致性的級別
1、強一致性
是最強的一致性模型,要求任何讀取操作都能讀取到最新的值,換句話說,要求任何寫入操作立即同步給所有程式。
2、弱一致性
這種一致性級別約束了系統在寫入成功後,不承諾立即可以讀到寫入的值,也不久承諾多久之後資料能夠達到一致,但會盡可能地保證到某個時間級別(比如秒級別)後,資料能夠達到一致狀態。
3、最終一致性
最終一致性是弱一致性的一個特例,系統會保證在一定時間內,能夠達到一個資料一致的狀態。
這裡之所以將最終一致性單獨提出來,是因為它是弱一致性中非常推崇的一種一致性模型,也是業界在大型分散式系統的資料一致性上比較推崇的模型。
一致性相關的理論
關係式資料庫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關注高可用性。
當今大規模、跨資料中心的分散式系統(如雲端計算)大多同時採用這兩種設計理念,並在兩者之間尋求平衡。
以上就是分散式一致性理論的介紹,更多分散式架構設計:Redis快取、Dubbo、Kafka、秒殺專題,請參考往期博文:阿里架構師進階23期精講:Redis、Kafka、Dubbo、Docker等。歡迎留言交流,專用於學習交流技術、分享面試機會,拒絕廣告,我也會在群內不定期答題、探討。
覺得有用請點贊支援。
相關文章
- 分散式系統中的CAP、ACID、BASE概念分散式
- 分散式從 ACID、CAP、BASE 的理論推進分散式
- 高併發架構系列:分散式鎖的由來、特點及Redis分散式鎖的實現詳解架構分散式Redis
- [分散式][高併發]高併發架構分散式架構
- 高併發架構系列:Redis快取和MySQL資料一致性方案詳解架構Redis快取MySql
- [分散式]架構設計原則--高併發分散式架構
- 10分鐘瞭解分散式CAP、BASE理論分散式
- 分散式架構和微服務架構的區別分散式架構微服務
- [分散式][高併發]熱點快取的架構優化分散式快取架構優化
- 分散式、高併發與多執行緒有何區別分散式執行緒
- 分散式事務及其CAP和base理論分散式
- 高併發架構最全詳解(圖文全面總結)架構
- 分散式|Dubbo架構設計詳解分散式架構
- 高併發架構架構
- 分散式必備理論基礎:CAP和BASE分散式
- 分散式架構基礎:Java RMI詳解分散式架構Java
- 個人筆記-服務端高併發分散式架構演進之路筆記服務端分散式架構
- 架構師眼中的高併發架構架構
- Java分散式系統設計:CAP定理與BASE理論Java分散式
- 分散式 PostgreSQL - Citus 架構及概念分散式SQL架構
- 分散式 PostgreSQL - Citus 架構及概念分散式SQL架構
- 架構師眼裡的高併發架構架構
- 微服務架構及分散式事務解決方案微服務架構分散式
- 取代ZooKeeper!高併發下的分散式一致性開源元件StateSynchronizer分散式元件
- 分散式架構篇 | 如何在分散式架構下完美實現“全域性資料一致性”?分散式架構
- 高併發架構的搭建(二)架構
- 分散式系列第一彈:分散式一致性!分散式
- 分散式base分散式
- 淘寶千萬級併發分散式架構的14次演進分散式架構
- 架構設計:分散式服務,庫表拆分模式詳解架構分散式模式
- 圖解分散式架構的發展和演進圖解分散式架構
- 高併發網站架構設計網站架構
- 高併發秒殺系統架構詳解,不是所有的秒殺都是秒殺!架構
- 【溫故知新】分散式事務及分散式鎖系列文章總結【石杉的架構筆記】分散式架構筆記
- [分散式][高併發]限流的四種策略分散式
- 看《大明王朝1566》聊分散式中的CAP和BASE理論分散式
- 深入理解高併發下的MySQL與Redis快取一致性問題(增刪改查資料快取的一致性、Canal、分散式系統CAP定理、BASE理論、強、弱一致性、順序、線性、因果、最終一致性)MySqlRedis快取分散式
- 圖解分散式架構的演進圖解分散式架構