分布式系統(tǒng)CAP理論及BASE理論簡介

前言

目前網(wǎng)絡(luò)上介紹CAP理論及BASE理論的文章已經(jīng)很多了,但很多文章內(nèi)容都在重復(fù),而且并不嚴(yán)謹(jǐn)。比如分布式系統(tǒng)一定要具備分區(qū)容忍性P,真的是這樣嗎,我們就不能夠選擇CA嗎?
本文將先介紹CAP理論及BASE理論的基本概念,然后總結(jié)下本文并談?wù)勛约簩?duì)分布式系統(tǒng)理論的思考。希望閱讀本文能夠?qū)Υ蠹矣兴鶐椭?/p>

CAP理論

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


分布式系統(tǒng)的CAP理論

具體含義如下:

  • 一致性(C):指強(qiáng)一致性,在分布式系統(tǒng)中的同一數(shù)據(jù)有多個(gè)副本的情形下,對(duì)于數(shù)據(jù)的更新操作體現(xiàn)出的效果與只有單份數(shù)據(jù)是一樣的。要求數(shù)據(jù)被一致地更新,所有數(shù)據(jù)變動(dòng)都是同步的。

  • 可用性(A):客戶端在任何時(shí)刻對(duì)大規(guī)模數(shù)據(jù)系統(tǒng)的讀/寫操作都應(yīng)該保證在限定延時(shí)內(nèi)完成。即系統(tǒng)在面對(duì)各種異常時(shí),依然可以響應(yīng)客戶端的讀/寫請(qǐng)求并提供正常服務(wù)。

  • 分區(qū)容忍性(P):以實(shí)際效果而言,分區(qū)相當(dāng)于對(duì)通信的時(shí)限要求。系統(tǒng)如果不能在時(shí)限內(nèi)達(dá)成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況(分布式系統(tǒng)一定會(huì)發(fā)生分區(qū)的情況的,因?yàn)榇嬖诰W(wǎng)絡(luò)中斷、消息丟失等網(wǎng)絡(luò)問題)。分區(qū)容忍性即指在網(wǎng)絡(luò)中斷、消息丟失的情況下,系統(tǒng)照樣能夠工作。
    Eric Brewer在提出CAP概念的同時(shí),也證明了CAP定理:任何分布式系統(tǒng)在可用性、一致性、分區(qū)容忍性方面,不可能同時(shí)被滿足,最多只能得其二。該定理也被稱作布魯爾定理(Brewer's theorem)。任何分布式系統(tǒng)的設(shè)計(jì)只是在C、A、P三者中的不同取舍而已,要么AP,要么CP,要么AC,但是不存在CAP同時(shí)存在的情況,這就是CAP定理的精髓所在。在網(wǎng)絡(luò)環(huán)境下,運(yùn)行環(huán)境出現(xiàn)網(wǎng)絡(luò)分區(qū)/分割一般是不可避免的,所以分布式系統(tǒng)一般必須具備分區(qū)容忍性P。因此,在設(shè)計(jì)分布式系統(tǒng)時(shí),架構(gòu)師一般在C和A之間進(jìn)行權(quán)衡和選擇,即要么CP,要么AP。當(dāng)然,如果系統(tǒng)要求為強(qiáng)事務(wù)型,比如面向網(wǎng)上支付等金融交易,我們也可以選擇CA,支付寶的OceanBase就是如此。
    為了進(jìn)一步理解CAP定理,我們來看一個(gè)簡單的例子:假定在分布式系統(tǒng)中有兩個(gè)節(jié)點(diǎn)m1和m2,分別存儲(chǔ)數(shù)據(jù)a的副本,作用在m1上的更新操作將數(shù)據(jù)a從v1更新成v2。該系統(tǒng)具備分區(qū)容忍性P,假定現(xiàn)在系統(tǒng)發(fā)生了故障,m1和m2之間的網(wǎng)絡(luò)斷開了,考慮以下兩種情況:

  • 情況一:若要保證一致性C,則要求數(shù)據(jù)a的所有副本必須一致,即保證m2上的數(shù)據(jù)a也被更新為v2而與m1同步。而此時(shí)由于發(fā)生網(wǎng)絡(luò)故障,m1與m2無法進(jìn)行通信,進(jìn)而無法將數(shù)據(jù)a同步到一致狀態(tài)。這樣,對(duì)于m2上數(shù)據(jù)a的讀請(qǐng)求必然要被拒絕,因此無法保證系統(tǒng)的可用性A。此種情況下,我們選擇了CAP中的CP而放棄了A,如下圖所示:


    系統(tǒng)選擇CP的情況
  • 情況二:若要保證可用性A,那么對(duì)于m2上數(shù)據(jù)a的讀請(qǐng)求必須在限定時(shí)間內(nèi)返回。在網(wǎng)絡(luò)故障尚未解決之前,m1和m2無法進(jìn)行通信,此時(shí)m2返回的a指為v1,而并非是當(dāng)前數(shù)據(jù)a的最新狀態(tài)v2,即出現(xiàn)了數(shù)據(jù)的不一致狀態(tài),因此無法保證系統(tǒng)的一致性C。此種情況下,我們選擇了CAP中的AP而放棄了C,如下圖所示:


    系統(tǒng)選擇AP的情況

    但是,如果我們的系統(tǒng)是強(qiáng)事務(wù)型,即實(shí)現(xiàn)了CA,那又是什么情況呢?

  • 情況三:如果系統(tǒng)實(shí)現(xiàn)的是CA,答案很簡單,因?yàn)橄到y(tǒng)放棄了P,所以當(dāng)網(wǎng)絡(luò)發(fā)生故障時(shí),將數(shù)據(jù)a從v1更新成v2的操作根本就不會(huì)成功(這里回顧一下分區(qū)容忍性的概念,當(dāng)網(wǎng)絡(luò)發(fā)生分區(qū)時(shí),系統(tǒng)依然可用,我們這里放棄了P,所以更新操作將不會(huì)成功),所以在系統(tǒng)實(shí)現(xiàn)CA的情況下,數(shù)據(jù)a將還是v1,系統(tǒng)依然是一致地、可用的,因?yàn)槟阕x操作還能給你正確返回,如下圖所示:


    系統(tǒng)選擇CA的情況

綜上可知,對(duì)于一個(gè)分布式系統(tǒng)來說,C、A、P三者不可兼得。

BASE理論

對(duì)于很多互聯(lián)網(wǎng)應(yīng)用來說,對(duì)一致性的要求可以降低,而可用性的要求則更為重要,從而產(chǎn)生了弱一致性的BASE理論。BASE理論是基于CAP理論逐步演化而來的,其核心思想是即使不能達(dá)到強(qiáng)一致性,也可以根據(jù)應(yīng)用特點(diǎn)采用適當(dāng)?shù)姆椒▉磉_(dá)到最終一致性的效果。BASE是Basically Available(基本可用)、Soft state(軟狀態(tài)/柔性狀態(tài))、Eventually consistent(最終一致性)三個(gè)詞組的簡寫,是對(duì)CAP中C和A的延伸。

BASE理論的含義如下:

  • 基本可用:在絕大多數(shù)時(shí)間內(nèi)系統(tǒng)處于可用狀態(tài),允許偶爾的失敗。
  • 軟狀態(tài)/柔性狀態(tài):數(shù)據(jù)狀態(tài)不要求在任意時(shí)刻都完全保持同步,即狀態(tài)可以有一段時(shí)間不同步。
  • 最終一致性:與強(qiáng)一致性相比,最終一致性是一種弱一致性。盡管軟狀態(tài)不要求任意時(shí)刻數(shù)據(jù)保持一致同步,但是最終一致性要求在給定時(shí)間窗口內(nèi)數(shù)據(jù)會(huì)達(dá)到一致狀態(tài)。

以上就是BASE理論的基本概念,可見BASE理論強(qiáng)調(diào)的是系統(tǒng)的高可用,允許系統(tǒng)在一定時(shí)間內(nèi)存在數(shù)據(jù)不一致,但在給定的時(shí)間窗口內(nèi),系統(tǒng)最終一定是要達(dá)到一致狀態(tài)的。

總結(jié)及思考

系統(tǒng)從集中式發(fā)展到分布式,一部分原因在于單機(jī)無法滿足日益龐大的數(shù)據(jù)的存儲(chǔ)與處理,而引入分布式后,我們又不得不面對(duì)分布式系統(tǒng)中的網(wǎng)絡(luò)問題。
分布式系統(tǒng)CAP理論及BASE理論可以說是分布式系統(tǒng)設(shè)計(jì)的基石,這些基本理論對(duì)于深入理解分布式環(huán)境下技術(shù)方案設(shè)計(jì)選型具有重要的指導(dǎo)作用。而其中BASE理論也可以說是對(duì)CAP理論的一種擴(kuò)展,通過系統(tǒng)的軟狀態(tài),最終一致性的特點(diǎn),婉轉(zhuǎn)的實(shí)現(xiàn)了CAP三者的結(jié)合。
最后,對(duì)于我們大多數(shù)人來講可能并沒有機(jī)會(huì)參與到分布式系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)當(dāng)中,但了解分布式系統(tǒng)理論也能夠幫助我們更好的理解分布式系統(tǒng)的設(shè)計(jì)理念,能夠幫助我們更好的選擇與使用分布式系統(tǒng)的產(chǎn)品。
如果文章對(duì)你有幫助,歡迎點(diǎn)贊及打賞,如有不足,也歡迎指正。

近期讀了Eric Brewer教授關(guān)于CAP理論在當(dāng)前技術(shù)體系下的新思考,對(duì)分布式系統(tǒng)下的相關(guān)理論又有了更深的思考,文章的核心思想應(yīng)該是將CAP 實(shí)踐應(yīng)針對(duì)具體的應(yīng)用,在合理范圍內(nèi)最大化數(shù)據(jù)一致性和可用性的‘合力’,通過規(guī)劃分區(qū)期間的操作和分區(qū)之后的恢復(fù)來使CAP三者之間達(dá)到一定的平衡。
最后附上文章鏈接:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed

寫在最后

聊技術(shù),不止于技術(shù)

歡迎大家關(guān)注我的個(gè)人公眾號(hào):WU雙,在這里我會(huì)與大家分享技術(shù)文章、管理知識(shí)以及個(gè)人的一些思想感悟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CAP理論斷言任何基于網(wǎng)絡(luò)的數(shù)據(jù)共享系統(tǒng),最多只能滿足數(shù)據(jù)一致性、可用性、分區(qū)容忍性三要素中的兩個(gè)要素。但是通過顯...
    他山之石頭閱讀 1,448評(píng)論 1 4
  • CAP理論的證明參見:本文轉(zhuǎn)自:CAP 理論十二年回顧:"規(guī)則"變了 CAP 理論斷言任何基于網(wǎng)絡(luò)的數(shù)據(jù)共享系統(tǒng),...
    YDDMAX_Y閱讀 717評(píng)論 0 2
  • 首先,我們來談?wù)凜AP理論的定義 CAP理論 定義:一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)...
    灬醉飲千殤閱讀 2,416評(píng)論 0 22
  • 問題的提出 在計(jì)算機(jī)科學(xué)領(lǐng)域,分布式一致性是一個(gè)相當(dāng)重要且被廣泛探索與論證問題,首先來看三種業(yè)務(wù)場景。 1、火車站...
    自度_3495閱讀 1,010評(píng)論 0 2
  • 1:宇宙訂單:請(qǐng)宇宙給我賺錢最多,最讓我快樂的以及最輕而易舉的事業(yè)機(jī)會(huì);像呼吸空氣一樣呼吸財(cái)務(wù)豐盛;擁有宇宙銀行,...
    若水之城閱讀 173評(píng)論 0 0

友情鏈接更多精彩內(nèi)容