輕松理解CAP理論

分布式系統(tǒng)(distributed system)正變得越來越重要荔茬,大型網(wǎng)站幾乎都是分布式的燥撞。

分布式系統(tǒng)的最大難點酝惧,就是各個節(jié)點的狀態(tài)如何保持一致瞎饲。CAP理論是在設(shè)計分布式系統(tǒng)的過程中沈善,處理數(shù)據(jù)一致性問題時必須考慮的理論乡数。

一、什么是CAP理論

CAP即:

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance(分區(qū)容忍性)

這三個性質(zhì)對應(yīng)了分布式系統(tǒng)的三個指標(biāo):
而CAP理論說的就是:一個分布式系統(tǒng)闻牡,不可能同時做到這三點净赴。如下圖:


接下來將詳細(xì)介紹C A P 三個指標(biāo)的含義,以及三者如何權(quán)衡罩润。

二 玖翅、 C、 A割以、P的含義

借用一下維基百科CAP理論一文中關(guān)于C金度、A、P三者的定義严沥。

Consistency : Every read receives the most recent write or an error

Availability : Every request receives a (non-error) response – without the guarantee that it contains the most recent write

Partition tolerance : The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes

翻譯一下就是:
一致性:對于客戶端的每次讀操作猜极,要么讀到的是最新的數(shù)據(jù),要么讀取失敗消玄。換句話說魔吐,一致性是站在分布式系統(tǒng)的角度,對訪問本系統(tǒng)的客戶端的一種承諾:要么我給您返回一個錯誤莱找,要么我給你返回絕對一致的最新數(shù)據(jù)酬姆,不難看出,其強調(diào)的是數(shù)據(jù)正確奥溺。

可用性:任何客戶端的請求都能得到響應(yīng)數(shù)據(jù)辞色,不會出現(xiàn)響應(yīng)錯誤。換句話說浮定,可用性是站在分布式系統(tǒng)的角度相满,對訪問本系統(tǒng)的客戶的另一種承諾:我一定會給您返回數(shù)據(jù)层亿,不會給你返回錯誤,但不保證數(shù)據(jù)最新立美,強調(diào)的是不出錯匿又。

分區(qū)容忍性:由于分布式系統(tǒng)通過網(wǎng)絡(luò)進(jìn)行通信,網(wǎng)絡(luò)是不可靠的建蹄。當(dāng)任意數(shù)量的消息丟失或延遲到達(dá)時碌更,系統(tǒng)仍會繼續(xù)提供服務(wù),不會掛掉洞慎。換句話說痛单,分區(qū)容忍性是站在分布式系統(tǒng)的角度,對訪問本系統(tǒng)的客戶端的再一種承諾:我會一直運行劲腿,不管我的內(nèi)部出現(xiàn)何種數(shù)據(jù)同步問題旭绒,強調(diào)的是不掛掉。

三焦人、權(quán)衡 C挥吵、A

之前提到,CAP理論說一個分布式系統(tǒng)不可能同時滿足C、A花椭、P這三個特性忽匈。那么我們就來分析C、A个从、P的權(quán)衡吧脉幢。

note:其實這里有個關(guān)于CAP理論理解的誤區(qū)歪沃。不要以為在所有時候都只能選擇兩個特性嗦锐。在不存在網(wǎng)絡(luò)失敗的情況下(分布式系統(tǒng)正常運行時),C和A能夠同時保證沪曙。只有當(dāng)網(wǎng)絡(luò)發(fā)生分區(qū)或失敗時奕污,才會在C和A之間做出選擇。

對于一個分布式系統(tǒng)而言液走,P是前提碳默,必須保證,因為只要有網(wǎng)絡(luò)交互就一定會有延遲和數(shù)據(jù)丟失缘眶,這種狀況我們必須接受嘱根,必須保證系統(tǒng)不能掛掉。所以只剩下C巷懈、A可以選擇该抒。要么保證數(shù)據(jù)一致性(保證數(shù)據(jù)絕對正確),要么保證可用性(保證系統(tǒng)不出錯)顶燕。

當(dāng)選擇了C(一致性)時凑保,如果由于網(wǎng)絡(luò)分區(qū)而無法保證特定信息是最新的冈爹,則系統(tǒng)將返回錯誤或超時。

當(dāng)選擇了A(可用性)時欧引,系統(tǒng)將始終處理客戶端的查詢并嘗試返回最新的可用的信息版本频伤,即使由于網(wǎng)絡(luò)分區(qū)而無法保證其是最新的。

四芝此、C憋肖、A、P三者之間的沖突

本部分主要參考分布式CAP定理癌蓖,為什么不能同時滿足三個特性瞬哼?

假設(shè)有兩臺服務(wù)器,一臺放著應(yīng)用A和數(shù)據(jù)庫V租副,一臺放著應(yīng)用B和數(shù)據(jù)庫V坐慰,他們之間的網(wǎng)絡(luò)可以互通,也就相當(dāng)于分布式系統(tǒng)的兩個部分用僧。

在滿足一致性的時候结胀,兩臺服務(wù)器(假設(shè)為N1,N2)的數(shù)據(jù)是一樣的,DB0=DB0责循。在滿足可用性的時候糟港,用戶不管是請求N1或者N2,都會得到立即響應(yīng)院仿。在滿足分區(qū)容錯性的情況下秸抚,N1和N2有任何一方宕機,或者網(wǎng)絡(luò)不通的時候歹垫,都不會影響N1和N2彼此之間的正常運作剥汤。

圖1

圖2

圖1中,用戶通過N1中的A應(yīng)用請求數(shù)據(jù)更新到服務(wù)器DB0排惨,這時N1中的服務(wù)器DB0變?yōu)镈B1吭敢,通過分布式系統(tǒng)的數(shù)據(jù)同步更新操作,N2服務(wù)器中的數(shù)據(jù)庫V0也更新為了DB1(圖2)暮芭,這時鹿驼,用戶通過B向數(shù)據(jù)庫發(fā)起請求得到的數(shù)據(jù)就是即時更新后的數(shù)據(jù)DB1。

上面是正常運作的情況辕宏,但分布式系統(tǒng)中畜晰,最大的問題就是網(wǎng)絡(luò),現(xiàn)在假設(shè)一種極端情況瑞筐,N1和N2之間的網(wǎng)絡(luò)斷開了凄鼻,但我們?nèi)砸С诌@種網(wǎng)絡(luò)異常,也就是滿足分區(qū)容錯性,那么這樣能不能同時滿足一致性和可用性呢野宜?

圖3

假設(shè)N1和N2之間通信的時候網(wǎng)絡(luò)突然出現(xiàn)故障扫步,有用戶向N1發(fā)送數(shù)據(jù)更新請求,那N1中的數(shù)據(jù)DB0將被更新為DB1匈子,由于網(wǎng)絡(luò)是斷開的河胎,N2中的數(shù)據(jù)庫仍舊是DB0;

如果這個時候虎敦,有用戶向N2發(fā)送數(shù)據(jù)讀取請求游岳,由于數(shù)據(jù)還沒有進(jìn)行同步,應(yīng)用程序沒辦法立即給用戶返回最新的數(shù)據(jù)DB1其徙,怎么辦呢胚迫?有二種選擇,第一唾那,犧牲數(shù)據(jù)一致性访锻,響應(yīng)舊的數(shù)據(jù)DB0給用戶;第二闹获,犧牲可用性期犬,阻塞等待,直到網(wǎng)絡(luò)連接恢復(fù)避诽,數(shù)據(jù)更新操作完成之后龟虎,再給用戶響應(yīng)最新的數(shù)據(jù)DB1。

參考資料:
CAP 定理的含義

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沙庐,一起剝皮案震驚了整個濱河市鲤妥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拱雏,老刑警劉巖棉安,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異古涧,居然都是意外死亡垂券,警方通過查閱死者的電腦和手機花盐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進(jìn)店門羡滑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人算芯,你說我怎么就攤上這事柒昏。” “怎么了熙揍?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵职祷,是天一觀的道長。 經(jīng)常有香客問我,道長有梆,這世上最難降的妖魔是什么是尖? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮泥耀,結(jié)果婚禮上饺汹,老公的妹妹穿的比我還像新娘。我一直安慰自己痰催,他們只是感情好兜辞,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著夸溶,像睡著了一般逸吵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缝裁,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天扫皱,我揣著相機與錄音,去河邊找鬼捷绑。 笑死啸罢,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的胎食。 我是一名探鬼主播扰才,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼厕怜!你這毒婦竟也來了衩匣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粥航,失蹤者是張志新(化名)和其女友劉穎琅捏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體递雀,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡柄延,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了缀程。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搜吧。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖杨凑,靈堂內(nèi)的尸體忽然破棺而出滤奈,到底是詐尸還是另有隱情,我是刑警寧澤撩满,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布蜒程,位于F島的核電站绅你,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昭躺。R本人自食惡果不足惜忌锯,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望领炫。 院中可真熱鬧汉规,春花似錦、人聲如沸驹吮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碟狞。三九已至啄枕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間族沃,已是汗流浹背频祝。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留脆淹,地道東北人常空。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像盖溺,于是被迫代替她去往敵國和親漓糙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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