CAP定理

分布式系統(tǒng)(distributed system)變得越來越重要氨距,大型網(wǎng)站幾乎都是分布式的恩伺。
分布式系統(tǒng)的最大難點徙瓶,就是各個節(jié)點的狀態(tài)如何同步喊积。CAP 定理是這方面的基本定理烹困,也是理解分布式系統(tǒng)的起點。

一乾吻、分布式系統(tǒng)的三個指標

CAP

Consistency韭邓,Availability,Partition tolerance溶弟。
它們的第一個字母分別是 C、A瞭郑、P辜御。這三個指標不可能同時做到。這個結(jié)論就叫做 CAP 定理屈张。

二擒权、Partition tolerance

先看 Partition tolerance,中文叫做“分區(qū)容錯”阁谆。
大多數(shù)分布式系統(tǒng)都分布在多個子網(wǎng)絡(luò)碳抄。每個子網(wǎng)絡(luò)就叫做一個區(qū)(partition)。分區(qū)容錯的意思是场绿,區(qū)間通信可能失敗剖效。比如,一臺服務(wù)器放在中國,另一臺服務(wù)器放在美國璧尸,這就是兩個區(qū)咒林,它們之間可能無法通信。


上圖中爷光,G1 和 G2 是兩臺跨區(qū)的服務(wù)器垫竞。G1 向 G2 發(fā)送一條消息,G2 可能無法收到蛀序。系統(tǒng)設(shè)計的時候欢瞪,必須考慮到這種情況。
一般來說徐裸,分區(qū)容錯無法避免遣鼓,因此可以認為 CAP 的 P 總是成立。CAP 定理告訴我們倦逐,剩下的 C 和 A 無法同時做到譬正。

三、Consistency

Consistency 中文叫做“一致性”檬姥。意思是曾我,寫操作之后的讀操作,必須返回該值健民。舉例來說抒巢,某條記錄是 v0,用戶向 G1 發(fā)起一個寫操作秉犹,將其改為 v1蛉谜。


接下來,用戶的讀操作就會得到 v1崇堵。這就叫一致性型诚。


問題是,用戶有可能向 G2 發(fā)起讀操作鸳劳,由于 G2 的值沒有發(fā)生變化狰贯,因此返回的是 v0。G1 和 G2 讀操作的結(jié)果不一致赏廓,這就不滿足一致性了涵紊。


為了讓 G2 也能變?yōu)?v1,就要在 G1 寫操作的時候幔摸,讓 G1 向 G2 發(fā)送一條消息摸柄,要求 G2 也改成 v1。


這樣的話既忆,用戶向 G2 發(fā)起讀操作驱负,也能得到 v1嗦玖。


四、Availability

Availability 中文叫做“可用性”电媳,意思是只要收到用戶的請求踏揣,服務(wù)器就必須給出回應(yīng)。
用戶可以選擇向 G1 或 G2 發(fā)起讀操作匾乓。不管是哪臺服務(wù)器捞稿,只要收到請求,就必須告訴用戶拼缝,到底是 v0 還是 v1娱局,否則就不滿足可用性。

五咧七、Consistency 和 Availability 的矛盾

一致性和可用性衰齐,為什么不可能同時成立?答案很簡單继阻,因為可能通信失敵芴巍(即出現(xiàn)分區(qū)容錯)。

如果保證 G2 的一致性瘟檩,那么 G1 必須在寫操作時抹缕,鎖定 G2 的讀操作和寫操作。只有數(shù)據(jù)同步后墨辛,才能重新開放讀寫卓研。鎖定期間,G2 不能讀寫睹簇,沒有可用性不奏赘。
如果保證 G2 的可用性,那么勢必不能鎖定 G2太惠,所以一致性不成立磨淌。
綜上所述,G2 無法同時做到一致性和可用性凿渊。系統(tǒng)設(shè)計時只能選擇一個目標伦糯。如果追求一致性,那么無法保證所有節(jié)點的可用性嗽元;如果追求所有節(jié)點的可用性,那就沒法做到一致性喂击。

在什么場合剂癌,可用性高于一致性?

舉例來說翰绊,發(fā)布一張網(wǎng)頁到 CDN佩谷,多個服務(wù)器有這張網(wǎng)頁的副本旁壮。后來發(fā)現(xiàn)一個錯誤,需要更新網(wǎng)頁谐檀,這時只能每個服務(wù)器都更新一遍抡谐。
一般來說,網(wǎng)頁的更新不是特別強調(diào)一致性桐猬。短時期內(nèi)麦撵,一些用戶拿到老版本,另一些用戶拿到新版本溃肪,問題不會特別大免胃。當然,所有人最終都會看到新版本惫撰。所以羔沙,這個場合就是可用性高于一致性。

六厨钻、互聯(lián)網(wǎng)企業(yè)做法

在大型網(wǎng)站應(yīng)用中扼雏,數(shù)據(jù)規(guī)模總是快速擴張夯膀,因為可伸縮性即分區(qū)耐受性(P)必不可少诗充。規(guī)模變大,機器數(shù)量也會變得龐大棍郎,這時網(wǎng)絡(luò)和服務(wù)器故障會頻繁出現(xiàn)其障,要想保證可用就必須保證分布式處理系統(tǒng)的高可用性。所以大型網(wǎng)站中涂佃,通常會選擇強化分布式存儲系統(tǒng)的可用性A和伸縮性P励翼,而在某種程度上放棄一致性C。

所說的數(shù)據(jù)一致性就是C辜荠,而可用性就是A汽抚。而性能不在CAP里。所以伯病,其實數(shù)據(jù)一致性和性能(用戶感知的性能)是可以兼顧的造烁。

數(shù)據(jù)一致性和可用性怎么權(quán)衡,如上所述午笛,一般是放棄一致性C惭蟋,那就是:一般互聯(lián)網(wǎng)高并發(fā)系統(tǒng)不會使用分布式事務(wù)(強一致性),因為使用分布式事務(wù)的系統(tǒng)復雜且性能低(系統(tǒng)執(zhí)行時間長)药磺,這樣很容易會由于資源占有時間過長不釋放而造成網(wǎng)絡(luò)擁塞告组、連接池爆滿、拒絕訪問(可用性)癌佩。

所以木缝,一般的互聯(lián)網(wǎng)高并發(fā)系統(tǒng)會采用數(shù)據(jù)的最終一致性便锨,而保護系統(tǒng)的可用性和“高性能”。數(shù)據(jù)最終一致性的方案有:定時校對補償我碟、消息隊列等異步處理等放案。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市矫俺,隨后出現(xiàn)的幾起案子吱殉,更是在濱河造成了極大的恐慌,老刑警劉巖恳守,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件考婴,死亡現(xiàn)場離奇詭異,居然都是意外死亡催烘,警方通過查閱死者的電腦和手機沥阱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伊群,“玉大人考杉,你說我怎么就攤上這事〗⑹迹” “怎么了崇棠?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丸卷。 經(jīng)常有香客問我枕稀,道長,這世上最難降的妖魔是什么谜嫉? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任萎坷,我火速辦了婚禮,結(jié)果婚禮上沐兰,老公的妹妹穿的比我還像新娘哆档。我一直安慰自己,他們只是感情好住闯,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布瓜浸。 她就那樣靜靜地躺著,像睡著了一般比原。 火紅的嫁衣襯著肌膚如雪插佛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天量窘,我揣著相機與錄音雇寇,去河邊找鬼。 笑死,一個胖子當著我的面吹牛谢床,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播厘线,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼识腿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了造壮?” 一聲冷哼從身側(cè)響起渡讼,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耳璧,沒想到半個月后成箫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡旨枯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年蹬昌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片攀隔。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡皂贩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昆汹,到底是詐尸還是另有隱情明刷,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布满粗,位于F島的核電站辈末,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏映皆。R本人自食惡果不足惜挤聘,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劫扒。 院中可真熱鬧檬洞,春花似錦、人聲如沸沟饥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤旷。三九已至广料,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間幼驶,已是汗流浹背艾杏。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留盅藻,地道東北人购桑。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓畅铭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親勃蜘。 傳聞我的和親對象是個殘疾皇子硕噩,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354