淺談分布式CAP定理

互聯(lián)網(wǎng)發(fā)展到現(xiàn)在衬廷,由于數(shù)據(jù)量大摇予、操作并發(fā)高等問題,大部分網(wǎng)站項目都采用分布式的架構(gòu)吗跋。

而分布式系統(tǒng)最大的特點數(shù)據(jù)分散侧戴,在不同網(wǎng)絡(luò)節(jié)點在某些時刻(數(shù)據(jù)未同步完,數(shù)據(jù)丟失)跌宛,數(shù)據(jù)會不一致酗宋。

在2000年,Eric Brewer教授在PODC的研討會上提出了一個猜想:一致性疆拘、可用性和分區(qū)容錯性三者無法在分布式系統(tǒng)中被同時滿足蜕猫,并且最多只能滿足其中兩個!

在2002年哎迄,Lynch證明其猜想回右,上升為定理隆圆。被這就是大家所認(rèn)知的CAP定理。

CAP是所有分布式數(shù)據(jù)庫的設(shè)計標(biāo)準(zhǔn)翔烁。例如Zookeeper渺氧、Redis、HBase等的設(shè)計都是基于CAP理論的蹬屹。

CAP定義

所謂的CAP就是分布式系統(tǒng)的三個特性:

  • Consistency侣背,一致性。所有分布式節(jié)點的數(shù)據(jù)是否一致慨默。
  • Availability贩耐,可用性。在部分節(jié)點有問題的情況(數(shù)據(jù)不一致业筏、節(jié)點故障)下,是否能繼續(xù)響應(yīng)服務(wù)(可用)鸟赫。
  • Partition tolerance蒜胖,分區(qū)容錯性。允許在節(jié)點(分區(qū))數(shù)據(jù)不一致的情況抛蚤。

深入理解

有A台谢、B、C三個分布式數(shù)據(jù)庫岁经。

當(dāng)A朋沮、B、C的數(shù)據(jù)是完全相同缀壤,那么就符合定理中的Consistency(一致性)樊拓。

假如A的數(shù)據(jù)與B的數(shù)據(jù)不相同,但是整體的服務(wù)(包含A塘慕、B筋夏、C的整體)沒有宕機(jī),依然可以對外系統(tǒng)服務(wù)图呢,那么就符合定理中的Availability(可用性)条篷。

分布式數(shù)據(jù)庫是沒有辦法百分百時刻保持各個節(jié)點數(shù)據(jù)一致的。假設(shè)一個用戶再A庫上更新了一條記錄蛤织,在更新完這一刻赴叹,A與B、C庫的數(shù)據(jù)是不一致的指蚜。這種情況在分布式數(shù)據(jù)庫上是必然存在的乞巧。這就是Partition tolerance(分區(qū)容錯性)

當(dāng)數(shù)據(jù)不一致的時候,必定是滿足分區(qū)容錯性摊鸡,如果不滿足摊欠,那么這個就不是一個可靠的分布式系統(tǒng)丢烘。

然而在數(shù)據(jù)不一致的情況下,系統(tǒng)要么選擇優(yōu)先保持?jǐn)?shù)據(jù)一致性些椒,這樣的話播瞳。系統(tǒng)首先要做的是數(shù)據(jù)的同步操作,此時需要暫停系統(tǒng)的響應(yīng)免糕。這就是滿足CP赢乓。

若系統(tǒng)優(yōu)先選擇可用性,那么在數(shù)據(jù)不一致的情況下石窑,會在第一時間放棄一致性牌芋,讓整體系統(tǒng)依然能運轉(zhuǎn)工作。這就是AP松逊。

所以躺屁,分布式系統(tǒng)在通常情況下,要不就滿足CP经宏,要不就滿足AP犀暑。

那么有沒有滿足CA的呢?有烁兰,當(dāng)分布式節(jié)點為1的時候耐亏,不存在P,自然就會滿足CA了沪斟。

例子

上面說到广辰,分區(qū)容錯性是分布式系統(tǒng)中必定要滿足的,需要權(quán)衡的是系統(tǒng)的一致性與可用性主之。那么常見的分布式系統(tǒng)是基于怎樣的權(quán)衡設(shè)計的择吊。

  • Zookeeper
    保證CP。當(dāng)主節(jié)點故障的時候槽奕,Zookeeper會重新選主干发。此時Zookeeper是不可用的,需要等待選主結(jié)束才能重新提供注冊服務(wù)史翘。顯然枉长,Zookeeper在節(jié)點故障的時候,并沒有滿足可用性的特性琼讽。在網(wǎng)絡(luò)情況復(fù)雜的生產(chǎn)環(huán)境下必峰,這樣的的情況出現(xiàn)的概率也是有的。一旦出現(xiàn)钻蹬,如果依賴Zookeeper的部分會卡頓吼蚁,在大型系統(tǒng)上,很容易引起系統(tǒng)的雪崩。這也是大型項目不選Zookeeper當(dāng)注冊中心的原因肝匆。
  • Eureka
    保證AP粒蜈。在Eureka中旗国,各個節(jié)點是平等的枯怖,它們相互注冊。掛掉幾個節(jié)點依然可以提供注冊服務(wù)的(可以配置成掛掉的比例)能曾,如果連接的Eureka發(fā)現(xiàn)不可用度硝,會自動切換到其他可用的幾點上。另外寿冕,當(dāng)一個服務(wù)嘗試連接Eureka發(fā)現(xiàn)不可用的時候蕊程,切換到另外一個Eureka服務(wù)上,有可能由于故障節(jié)點未來得及同步最新配置驼唱,所以這個服務(wù)讀取的數(shù)據(jù)可能不是最新的藻茂。所以當(dāng)不要求強(qiáng)一致性的情況下,Eureka作為注冊中心更為可靠玫恳。
  • Git
    其實Git也是也是分布式數(shù)據(jù)庫辨赐。它保證的是CP。很容易猜想到纽窟,云端的Git倉庫于本地倉庫必定是要保證數(shù)據(jù)的一致性的肖油,如果不一致會先讓數(shù)據(jù)一致再工作兼吓。當(dāng)你修改完本地代碼臂港,想push代碼到Git倉庫上時,假如云端的HEAD與本地的HEAD不一致的時候视搏,會先同步云端的HEAD到本地HEAD审孽,再把本地的HEAD同步到云端。最終保證數(shù)據(jù)的一致性浑娜。

更多技術(shù)文章佑力、精彩干貨,請關(guān)注
博客:zackku.com
微信公眾號:Zack說碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末筋遭,一起剝皮案震驚了整個濱河市打颤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌漓滔,老刑警劉巖编饺,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異响驴,居然都是意外死亡透且,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門豁鲤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秽誊,“玉大人鲸沮,你說我怎么就攤上這事」郏” “怎么了讼溺?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棍厌。 經(jīng)常有香客問我肾胯,道長,這世上最難降的妖魔是什么耘纱? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任敬肚,我火速辦了婚禮,結(jié)果婚禮上束析,老公的妹妹穿的比我還像新娘艳馒。我一直安慰自己,他們只是感情好员寇,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布弄慰。 她就那樣靜靜地躺著,像睡著了一般蝶锋。 火紅的嫁衣襯著肌膚如雪鄙煤。 梳的紋絲不亂的頭發(fā)上庭砍,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼嗦董。 笑死测萎,一個胖子當(dāng)著我的面吹牛彭雾,可吹牛的內(nèi)容都是我干的抄沮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼粥庄,長吁一口氣:“原來是場噩夢啊……” “哼丧失!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起惜互,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤布讹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后训堆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體描验,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年蔫慧,在試婚紗的時候發(fā)現(xiàn)自己被綠了挠乳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖睡扬,靈堂內(nèi)的尸體忽然破棺而出盟蚣,到底是詐尸還是另有隱情,我是刑警寧澤卖怜,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布屎开,位于F島的核電站,受9級特大地震影響马靠,放射性物質(zhì)發(fā)生泄漏奄抽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一甩鳄、第九天 我趴在偏房一處隱蔽的房頂上張望逞度。 院中可真熱鬧,春花似錦妙啃、人聲如沸档泽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馆匿。三九已至,卻和暖如春燥滑,著一層夾襖步出監(jiān)牢的瞬間渐北,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工铭拧, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赃蛛,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓羽历,卻偏偏與公主長得像焊虏,于是被迫代替她去往敵國和親淡喜。 傳聞我的和親對象是個殘疾皇子秕磷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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