分布式理論:CAP原則與BASE理論

CAP 定理的含義

1998年丙唧,加州大學的計算機科學家 Eric Brewer 提出庐橙,分布式系統(tǒng)有三個指標。

  • Consistency
  • Availability
  • Partition tolerance

它們的第一個字母分別是 C、A宵膨、P巢墅。
Eric Brewer 說诸狭,這三個指標不可能同時做到。這個結(jié)論就叫做 CAP 定理君纫。

CAP原則又稱CAP定理驯遇,指的是在一個分布式系統(tǒng)中, Consistency(一致性)蓄髓、 Availability(可用性)叉庐、Partition tolerance(分區(qū)容錯性),三者不可得兼双吆。

一致性(C):在分布式系統(tǒng)中的所有數(shù)據(jù)備份眨唬,在同一時刻是否同樣的值会前。(等同于所有節(jié)點訪問同一份最新的數(shù)據(jù)副本)

可用性(A):保證每個請求不管成功或者失敗都有響應。

分區(qū)容忍性(P) :系統(tǒng)中任意信息的丟失或失敗不會影響系統(tǒng)的繼續(xù)運作匾竿。

image.png

CAP原則的精髓就是要么AP瓦宜,要么CP,要么AC岭妖,但是不存在CAP临庇。如果在某個分布式系統(tǒng)中數(shù)據(jù)無副本, 那么系統(tǒng)必然滿足強一致性條件昵慌, 因為只有獨一數(shù)據(jù)假夺,不會出現(xiàn)數(shù)據(jù)不一致的情況,此時C和P兩要素具備斋攀,但是如果系統(tǒng)發(fā)生了網(wǎng)絡(luò)分區(qū)狀況或者宕機已卷,必然導致某些數(shù)據(jù)不可以訪問,此時可用性條件就不能被滿足淳蔼,即在此情況下獲得了CP系統(tǒng)侧蘸,但是CAP不可同時滿足 。

因此在進行分布式架構(gòu)設(shè)計時鹉梨,必須做出取舍讳癌。當前一般是通過分布式緩存中各節(jié)點的最終一致性來提高系統(tǒng)的性能,通過使用多節(jié)點之間的數(shù)據(jù)異步復制技術(shù)來實現(xiàn)集群化的數(shù)據(jù)一致性存皂。通常使用類似 memcached 之類的 NOSQL 作為實現(xiàn)手段晌坤。雖然 memcached 也可以是分布式集群環(huán)境的,但是對于一份數(shù)據(jù)來說旦袋,它總是存儲在某一臺 memcached 服務(wù)器上骤菠。如果發(fā)生網(wǎng)絡(luò)故障或是服務(wù)器死機,則存儲在這臺服務(wù)器上的所有數(shù)據(jù)都將不可訪問猜憎。由于數(shù)據(jù)是存儲在內(nèi)存中的娩怎,重啟服務(wù)器,將導致數(shù)據(jù)全部丟失胰柑。當然也可以自己實現(xiàn)一套機制截亦,用來在分布式 memcached 之間進行數(shù)據(jù)的同步和持久化,但是實現(xiàn)難度是非常大的 柬讨。


BASE理論是由eBay架構(gòu)師提出的崩瓤。BASE是對CAP中一致性和可用性權(quán)衡的結(jié)果,其來源于對大規(guī)牟裙伲互聯(lián)網(wǎng)分布式系統(tǒng)實踐的總結(jié)却桶,是基于CAP定律逐步演化而來。其核心思想是即使無法做到強一致性,但每個應用都可以根據(jù)自身業(yè)務(wù)特點颖系,才用適當?shù)姆绞絹硎瓜到y(tǒng)打到最終一致性嗅剖。

BASE理論的內(nèi)容

  • 基本可用(Basically Available)
  • 軟狀態(tài)(Soft State)
  • 最終一致性(Eventually Consistent)
    下面展開討論:
  1. 基本可用

什么是基本可用呢?假設(shè)系統(tǒng)嘁扼,出現(xiàn)了不可預知的故障信粮,但還是能用,相比較正常的系統(tǒng)而言:

響應時間上的損失:正常情況下的搜索引擎0.5秒即返回給用戶結(jié)果趁啸,而基本可用的搜索引擎可以在2秒作用返回結(jié)果强缘。
功能上的損失:在一個電商網(wǎng)站上,正常情況下不傅,用戶可以順利完成每一筆訂單旅掂。但是到了大促期間,為了保護購物系統(tǒng)的穩(wěn)定性访娶,部分消費者可能會被引導到一個降級頁面商虐。

  1. 軟狀態(tài)

什么是軟狀態(tài)呢?相對于原子性而言震肮,要求多個節(jié)點的數(shù)據(jù)副本都是一致的称龙,這是一種“硬狀態(tài)”。

軟狀態(tài)指的是:允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài)戳晌,并認為該狀態(tài)不影響系統(tǒng)的整體可用性,即允許系統(tǒng)在多個不同節(jié)點的數(shù)據(jù)副本存在數(shù)據(jù)延時痴柔。

  1. 最終一致性

上面說軟狀態(tài)沦偎,然后不可能一直是軟狀態(tài),必須有個時間期限咳蔚。在期限過后豪嚎,應當保證所有副本保持數(shù)據(jù)一致性,從而達到數(shù)據(jù)的最終一致性谈火。這個時間期限取決于網(wǎng)絡(luò)延時侈询、系統(tǒng)負載、數(shù)據(jù)復制方案設(shè)計等等因素糯耍。

而在實際工程實踐中扔字,最終一致性分為5種:

1) 因果一致性(Causal consistency)

因果一致性指的是:如果節(jié)點A在更新完某個數(shù)據(jù)后通知了節(jié)點B,那么節(jié)點B之后對該數(shù)據(jù)的訪問和修改都是基于A更新后的值温技。于此同時革为,和節(jié)點A無因果關(guān)系的節(jié)點C的數(shù)據(jù)訪問則沒有這樣的限制。

2)讀己之所寫(Read your writes)

讀己之所寫指的是:節(jié)點A更新一個數(shù)據(jù)后舵鳞,它自身總是能訪問到自身更新過的最新值震檩,而不會看到舊值。其實也算一種因果一致性。

3)會話一致性(Session consistency)

會話一致性將對系統(tǒng)數(shù)據(jù)的訪問過程框定在了一個會話當中:系統(tǒng)能保證在同一個有效的會話中實現(xiàn) “讀己之所寫” 的一致性抛虏,也就是說博其,執(zhí)行更新操作之后,客戶端能夠在同一個會話中始終讀取到該數(shù)據(jù)項的最新值迂猴。

4)單調(diào)讀一致性(Monotonic read consistency)

單調(diào)讀一致性指的是:如果一個節(jié)點從系統(tǒng)中讀取出一個數(shù)據(jù)項的某個值后贺奠,那么系統(tǒng)對于該節(jié)點后續(xù)的任何數(shù)據(jù)訪問都不應該返回更舊的值。

5)單調(diào)寫一致性(Monotonic write consistency)

單調(diào)寫一致性指的是:一個系統(tǒng)要能夠保證來自同一個節(jié)點的寫操作被順序的執(zhí)行错忱。

在實際的實踐中儡率,這5種系統(tǒng)往往會結(jié)合使用,以構(gòu)建一個具有最終一致性的分布式系統(tǒng)以清。

實際上儿普,不只是分布式系統(tǒng)使用最終一致性,關(guān)系型數(shù)據(jù)庫在某個功能上掷倔,也是使用最終一致性的眉孩。比如備份,數(shù)據(jù)庫的復制過程是需要時間的勒葱,這個復制過程中浪汪,業(yè)務(wù)讀取到的值就是舊的。當然凛虽,最終還是達成了數(shù)據(jù)一致性死遭。這也算是一個最終一致性的經(jīng)典案例。

小結(jié)

總體來說BASE理論面向的是大型高可用凯旋、可擴展的分布式系統(tǒng)呀潭。與傳統(tǒng)ACID特性相反,不同于ACID的強一致性模型至非,BASE提出通過犧牲強一致性來獲得可用性钠署,并允許數(shù)據(jù)段時間內(nèi)的不一致,但是最終達到一致狀態(tài)荒椭。同時谐鼎,在實際分布式場景中,不同業(yè)務(wù)對數(shù)據(jù)的一致性要求不一樣趣惠。因此在設(shè)計中狸棍,ACID和BASE理論往往又會結(jié)合使用。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末信卡,一起剝皮案震驚了整個濱河市隔缀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌傍菇,老刑警劉巖猾瘸,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡牵触,警方通過查閱死者的電腦和手機淮悼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來揽思,“玉大人袜腥,你說我怎么就攤上這事《ず梗” “怎么了羹令?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長损痰。 經(jīng)常有香客問我福侈,道長,這世上最難降的妖魔是什么卢未? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任肪凛,我火速辦了婚禮,結(jié)果婚禮上辽社,老公的妹妹穿的比我還像新娘伟墙。我一直安慰自己,他們只是感情好滴铅,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布戳葵。 她就那樣靜靜地躺著,像睡著了一般失息。 火紅的嫁衣襯著肌膚如雪譬淳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天盹兢,我揣著相機與錄音,去河邊找鬼守伸。 笑死绎秒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的尼摹。 我是一名探鬼主播见芹,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蠢涝!你這毒婦竟也來了玄呛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤和二,失蹤者是張志新(化名)和其女友劉穎徘铝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡惕它,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年怕午,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淹魄。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡郁惜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甲锡,到底是詐尸還是另有隱情兆蕉,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布缤沦,位于F島的核電站虎韵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏疚俱。R本人自食惡果不足惜劝术,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一锥腻、第九天 我趴在偏房一處隱蔽的房頂上張望恶守。 院中可真熱鬧,春花似錦收恢、人聲如沸梁钾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姆泻。三九已至零酪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拇勃,已是汗流浹背四苇。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留方咆,地道東北人月腋。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像瓣赂,于是被迫代替她去往敵國和親榆骚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內(nèi)容