天天看點

分布式系統CAP理論及BASE理論簡介

前言

目前網絡上介紹CAP理論及BASE理論的文章已經很多了,但很多文章内容都在重複,而且并不嚴謹。比如分布式系統一定要具備分區容忍性P,真的是這樣嗎,我們就不能夠選擇CA嗎?

本文将先介紹CAP理論及BASE理論的基本概念,然後總結下本文并談談自己對分布式系統理論的思考。希望閱讀本文能夠對大家有所幫助。

CAP理論

分布式系統的CAP理論是由Eric Brewer于1999年首先提出的,CAP是對Consistency(一緻性)、Availability(可用性)、Partition tolerance(分區容忍性)的一種簡稱,如下圖所示:

分布式系統CAP理論及BASE理論簡介

具體含義如下:

  • 一緻性(C):指強一緻性,在分布式系統中的同一資料有多個副本的情形下,對于資料的更新操作展現出的效果與隻有單份資料是一樣的。要求資料被一緻地更新,所有資料變動都是同步的。
  • 可用性(A):用戶端在任何時刻對大規模資料系統的讀/寫操作都應該保證在限定延時内完成。即系統在面對各種異常時,依然可以響應用戶端的讀/寫請求并提供正常服務。
  • 分區容忍性(P):以實際效果而言,分區相當于對通信的時限要求。系統如果不能在時限内達成資料一緻性,就意味着發生了分區的情況(分布式系統一定會發生分區的情況的,因為存在網絡中斷、消息丢失等網絡問題)。分區容忍性即指在網絡中斷、消息丢失的情況下,系統照樣能夠工作。

    Eric Brewer在提出CAP概念的同時,也證明了CAP定理:任何分布式系統在可用性、一緻性、分區容忍性方面,不可能同時被滿足,最多隻能得其二。該定理也被稱作布魯爾定理(Brewer’s theorem)。任何分布式系統的設計隻是在C、A、P三者中的不同取舍而已,要麼AP,要麼CP,要麼AC,但是不存在CAP同時存在的情況,這就是CAP定理的精髓所在。在網絡環境下,運作環境出現網絡分區/分割一般是不可避免的,是以分布式系統一般必須具備分區容忍性P。是以,在設計分布式系統時,架構師一般在C和A之間進行權衡和選擇,即要麼CP,要麼AP。當然,如果系統要求為強事務型,比如面向網上支付等金融交易,我們也可以選擇CA,支付寶的OceanBase就是如此。

    為了進一步了解CAP定理,我們來看一個簡單的例子:假定在分布式系統中有兩個節點m1和m2,分别存儲資料a的副本,作用在m1上的更新操作将資料a從v1更新成v2。該系統具備分區容忍性P,假定現在系統發生了故障,m1和m2之間的網絡斷開了,考慮以下兩種情況:

  • 情況一:若要保證一緻性C,則要求資料a的所有副本必須一緻,即保證m2上的資料a也被更新為v2而與m1同步。而此時由于發生網絡故障,m1與m2無法進行通信,進而無法将資料a同步到一緻狀态。這樣,對于m2上資料a的讀請求必然要被拒絕,是以無法保證系統的可用性A。此種情況下,我們選擇了CAP中的CP而放棄了A,如下圖所示:
    分布式系統CAP理論及BASE理論簡介
  • 情況二:若要保證可用性A,那麼對于m2上資料a的讀請求必須在限定時間内傳回。在網絡故障尚未解決之前,m1和m2無法進行通信,此時m2傳回的a指為v1,而并非是目前資料a的最新狀态v2,即出現了資料的不一緻狀态,是以無法保證系統的一緻性C。此種情況下,我們選擇了CAP中的AP而放棄了C,如下圖所示:
    分布式系統CAP理論及BASE理論簡介
    但是,如果我們的系統是強事務型,即實作了CA,那又是什麼情況呢?
  • 情況三:如果系統實作的是CA,答案很簡單,因為系統放棄了P,是以當網絡發生故障時,将資料a從v1更新成v2的操作根本就不會成功(這裡回顧一下分區容忍性的概念,當網絡發生分區時,系統依然可用,我們這裡放棄了P,是以更新操作将不會成功),是以在系統實作CA的情況下,資料a将還是v1,系統依然是一緻地、可用的,因為你讀操作還能給你正确傳回,如下圖所示:
    分布式系統CAP理論及BASE理論簡介

綜上可知,對于一個分布式系統來說,C、A、P三者不可兼得。

BASE理論

對于很多網際網路應用來說,對一緻性的要求可以降低,而可用性的要求則更為重要,進而産生了弱一緻性的BASE理論。BASE理論是基于CAP理論逐漸演化而來的,其核心思想是即使不能達到強一緻性,也可以根據應用特點采用适當的方法來達到最終一緻性的效果。BASE是Basically Available(基本可用)、Soft state(軟狀态/柔性狀态)、Eventually consistent(最終一緻性)三個詞組的簡寫,是對CAP中C和A的延伸。

BASE理論的含義如下:

  • 基本可用:在絕大多數時間内系統處于可用狀态,允許偶爾的失敗。
  • 軟狀态/柔性狀态:資料狀态不要求在任意時刻都完全保持同步,即狀态可以有一段時間不同步。
  • 最終一緻性:與強一緻性相比,最終一緻性是一種弱一緻性。盡管軟狀态不要求任意時刻資料保持一緻同步,但是最終一緻性要求在給定時間視窗内資料會達到一緻狀态。

以上就是BASE理論的基本概念,可見BASE理論強調的是系統的高可用,允許系統在一定時間記憶體在資料不一緻,但在給定的時間視窗内,系統最終一定是要達到一緻狀态的。

總結及思考

系統從集中式發展到分布式,一部分原因在于單機無法滿足日益龐大的資料的存儲與處理,而引入分布式後,我們又不得不面對分布式系統中的網絡問題。

分布式系統CAP理論及BASE理論可以說是分布式系統設計的基石,這些基本理論對于深入了解分布式環境下技術方案設計選型具有重要的指導作用。而其中BASE理論也可以說是對CAP理論的一種擴充,通過系統的軟狀态,最終一緻性的特點,婉轉的實作了CAP三者的結合。

最後,對于我們大多數人來講可能并沒有機會參與到分布式系統的設計與實作當中,但了解分布式系統理論也能夠幫助我們更好的了解分布式系統的設計理念,能夠幫助我們更好的選擇與使用分布式系統的産品。

如果文章對你有幫助,歡迎點贊及打賞,如有不足,也歡迎指正。

近期讀了Eric Brewer教授關于CAP理論在目前技術體系下的新思考,對分布式系統下的相關理論又有了更深的思考,文章的核心思想應該是将CAP 實踐應針對具體的應用,在合理範圍内最大化資料一緻性和可用性的‘合力’,通過規劃分區期間的操作和分區之後的恢複來使CAP三者之間達到一定的平衡。

最後附上文章連結:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed。

寫在最後

聊技術,不止于技術。

歡迎大家關注我的個人公衆号:WU雙,在這裡我會與大家分享技術文章、管理知識以及個人的一些思想感悟。

繼續閱讀