分布式系統(tǒng)之CAP定理

CAP定理是這樣描述的:一個分布式系統(tǒng)不可能同時滿足一致性(C:Consistency)创坞、可用性(A:Availability)和分區(qū)容錯性(P:Partition tolerance)這三個基本需求猜绣,最多只能同時滿足其中兩項。

本文主要從以下幾個部分來展開說明:

1善茎、什么是分布式系統(tǒng)以及為什么會受CAP定理限制?

2、什么是CAP?

3钞螟、分布式系統(tǒng)為什么最多同時滿足CAP定理的其中兩項?

一谎碍、什么是分布式系統(tǒng)以及為什么會受CAP定理限制鳞滨?

George Coulouris(《Distributed Systems-Concepts and Design》作者)對分布式系統(tǒng)下了一個簡單的定義:你會知道系統(tǒng)當(dāng)中的某臺電腦崩潰或停止運(yùn)行了,但是你的軟件永遠(yuǎn)不會蟆淀。這句話非常簡單拯啦,但也非常形象地說明了分布式系統(tǒng)的特點。

設(shè)計分布式系統(tǒng)的目的無非就是為了提升系統(tǒng)處理能力熔任、增強(qiáng)系統(tǒng)穩(wěn)定性等SLA(服務(wù)等級協(xié)議)指標(biāo)褒链,但每個系統(tǒng)的SLA指標(biāo)可能都不太一樣,并且每個指標(biāo)對應(yīng)的權(quán)重也不一樣疑苔。比如微博可能更關(guān)注系統(tǒng)的可用性甫匹,數(shù)據(jù)只要最終一致即可,而銀行系統(tǒng)相比可用性則更關(guān)注系統(tǒng)的數(shù)據(jù)一致性。但是分布式系統(tǒng)還是有以下幾個通用的特點:

1兵迅、服務(wù)冗余抢韭。為系統(tǒng)的每種服務(wù)都提供若干冗余備份,當(dāng)正常的服務(wù)出現(xiàn)問題時恍箭,系統(tǒng)啟用冗余備份服務(wù)來接管刻恭,盡量保證每時每刻所有的請求都能夠得到正常的處理。但這同時也帶來了冗余服務(wù)之間的數(shù)據(jù)一致性問題扯夭。

2鳍贾、高可擴(kuò)展性。當(dāng)系統(tǒng)的請求量或者計算量增加時交洗,系統(tǒng)可以通過動態(tài)擴(kuò)展的方式提高處理能力骑科,以應(yīng)付高峰期的流量。同樣當(dāng)系統(tǒng)的請求量或計算量減少時藕筋,系統(tǒng)可以通過動態(tài)減縮的方式減少服務(wù)器的運(yùn)行纵散,降低運(yùn)行成本。但這也同時帶來了當(dāng)某臺服務(wù)器down或者網(wǎng)絡(luò)連接斷了的問題隐圾。

3伍掀、透明性。用戶無需關(guān)心所用的系統(tǒng)是分布式還是單體的暇藏,也不需關(guān)心分布式系統(tǒng)是有上千臺還是只有幾臺服務(wù)器蜜笤,更不需關(guān)心分布式系統(tǒng)的所有服務(wù)器是否都能正常工作。用戶唯一關(guān)心的是自己的請求能否得到合理的處理盐碱。所以上面1把兔、2點帶來的問題,必須在分布式系統(tǒng)設(shè)計時進(jìn)行解決瓮顽,盡量減少對于用戶的影響县好。

根據(jù)上面分布式系統(tǒng)的幾個通用特點,在設(shè)計分布式系統(tǒng)時必須考慮以下三個問題:

1暖混、數(shù)據(jù)的一致性問題缕贡。2、當(dāng)某些服務(wù)不可用時的問題拣播。3晾咪、當(dāng)某些服務(wù)器不可通過網(wǎng)絡(luò)通信時的問題。

上面這三個問題分別對應(yīng)CAP中的一致性贮配、可用性以及分區(qū)容錯性谍倦,所以分布式系統(tǒng)的設(shè)計必須受限于CAP理論。

二泪勒、什么是CAP?

C(Consistency):一致性

一致性必然涉及到多個實體昼蛀,如果只有一個實體就不存在是否一致的說法宴猾。比如一個人的隊列就不存在整齊一致的說法,只有至少兩個人的隊列才會被認(rèn)為是整齊一致或者不一致曹洽。

一致性是指系統(tǒng)在存在多個實體的情形下鳍置,對于系統(tǒng)內(nèi)任意對象x,在任意時刻送淆,不管是從實體a、實體b怕轿、...還是實體n獲取到的數(shù)據(jù)應(yīng)該是一致的偷崩。這里的一致性其實就是指強(qiáng)一致性。

拿某電商系統(tǒng)中的商品剩余庫存舉例:某個商品的當(dāng)前庫存是n撞羽,當(dāng)被購買一件后阐斜,庫存變?yōu)榱薾-1。那該 電商系統(tǒng)的所有用戶查詢該商品的庫存時诀紊,如果返回的都是n-1谒出,則說明該電商系統(tǒng)滿足一致性。如果有些返回n-1邻奠,有些返回n笤喳,甚至其它的,則說明該電商系統(tǒng)不滿足一致性碌宴。

A(Availability):可用性

可用性是指在系統(tǒng)的某些實體失效的前提下杀狡,系統(tǒng)還是能正常對外提供服務(wù)。當(dāng)然如果整個系統(tǒng)下的所有實體都失效了贰镣,那整個系統(tǒng)也就失效了呜象,系統(tǒng)就不存在可用性的說法了。

比如某電商系統(tǒng)部署了M1和M2服務(wù)來負(fù)載分擔(dān)處理用戶登陸請求碑隆。某個時刻M1服務(wù)突然掛了恭陡,那系統(tǒng)應(yīng)該把所有的登陸請求都轉(zhuǎn)發(fā)給M2服務(wù)來處理,保障所有的用戶都能成功登陸上煤。如果M2服務(wù)無法處理全部的請求休玩,系統(tǒng)應(yīng)該立即自動啟動M3服務(wù)來負(fù)載分擔(dān),或者采取服務(wù)降級以及限流的方式楼入,給用戶一個合理的響應(yīng)信息哥捕。

對于許多系統(tǒng)而言,四個9的(即99.99%)可用性都被認(rèn)為是高可用性嘉熊。

P(Partition tolerance):分區(qū)容錯性

分區(qū)容錯性是指系統(tǒng)的某些實體之間無法溝通時遥赚,整個系統(tǒng)會形成幾個完全隔離的分區(qū),系統(tǒng)能夠容忍這種分區(qū)的異常阐肤,滿足系統(tǒng)的一致性或者可用性凫佛,但是在滿足分區(qū)容錯性的前提下讲坎,一致性和可用性只能滿足其中的一個。

比如某電商系統(tǒng)的下訂單子系統(tǒng)和訂單處理子系統(tǒng)之間無法通過網(wǎng)絡(luò)通信了愧薛。那現(xiàn)在有兩種情況:

第一種:這兩個子系統(tǒng)還是正常對外提供服務(wù)晨炕,這樣必然帶來訂單數(shù)據(jù)不一致的問題。

第二種:這兩個子系統(tǒng)均不對外提供服務(wù)毫炉,這樣必然帶來可用性的問題瓮栗。

三、分布式系統(tǒng)為什么最多滿足CAP定理中的兩項瞄勾?

1费奸、滿足分區(qū)容錯性的情況下,是否能同時滿足一致性和可用性进陡?

(1)如果要滿足可用性愿阐,則無法滿足一致性,則如下所示(x的值最初為2):


滿足分區(qū)容錯性+可用性

(2)如果要滿足一致性趾疚,則無法滿足可用性缨历,則如下所示(x的值最初為2):


滿足分區(qū)容錯性+一致性

2、滿足可用性的情況下糙麦,是否能同時滿足一致性和分區(qū)容錯性辛孵?

(1)如果要滿足一致性,則無法滿足分區(qū)容錯性喳资,則如下所示(x的值最初為2):


滿足可用性+一致性

(2)如果要滿足分區(qū)容錯性觉吭,則無法滿足一致性,則如下所示(x的值最初為2):


滿足可用性+分區(qū)容錯性

3仆邓、滿足一致性的情況下鲜滩,是否能同時滿足可用性和分區(qū)容錯性?

(1)如果要滿足可用性节值,則無法滿足分區(qū)容錯性徙硅,則如下所示(x的值最初為2):


滿足一致性+可用性

(2)如果要滿足分區(qū)容錯性,則無法滿足可用性搞疗,則如下所示(x的值最初為2):


滿足一致性+分區(qū)容錯性


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗓蘑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匿乃,更是在濱河造成了極大的恐慌桩皿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件幢炸,死亡現(xiàn)場離奇詭異泄隔,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)宛徊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門佛嬉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逻澳,“玉大人,你說我怎么就攤上這事暖呕⌒弊觯” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵湾揽,是天一觀的道長瓤逼。 經(jīng)常有香客問我,道長钝腺,這世上最難降的妖魔是什么抛姑? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮艳狐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘皿桑。我一直安慰自己毫目,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布诲侮。 她就那樣靜靜地躺著镀虐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沟绪。 梳的紋絲不亂的頭發(fā)上刮便,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音绽慈,去河邊找鬼恨旱。 笑死,一個胖子當(dāng)著我的面吹牛坝疼,可吹牛的內(nèi)容都是我干的搜贤。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼钝凶,長吁一口氣:“原來是場噩夢啊……” “哼仪芒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耕陷,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掂名,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后哟沫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體饺蔑,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年南用,在試婚紗的時候發(fā)現(xiàn)自己被綠了膀钠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掏湾。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肿嘲,靈堂內(nèi)的尸體忽然破棺而出融击,到底是詐尸還是另有隱情,我是刑警寧澤雳窟,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布尊浪,位于F島的核電站,受9級特大地震影響封救,放射性物質(zhì)發(fā)生泄漏拇涤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一誉结、第九天 我趴在偏房一處隱蔽的房頂上張望鹅士。 院中可真熱鬧,春花似錦惩坑、人聲如沸掉盅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趾痘。三九已至,卻和暖如春蔓钟,著一層夾襖步出監(jiān)牢的瞬間永票,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工滥沫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留侣集,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓佣谐,卻偏偏與公主長得像肚吏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子狭魂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354

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