1晴楔、分布式基礎(chǔ)之CAP和BASE理論

  • ACID 是數(shù)據(jù)庫(kù)事務(wù)完整性的理論顿苇,CAP 是分布式系統(tǒng)設(shè)計(jì)理論,BASE 是 CAP 理論中 AP 方案的延伸税弃。

一纪岁、從集中式到分布式

1、集中式

集中式是指有一臺(tái)或者多臺(tái)計(jì)算機(jī)組成的中心節(jié)點(diǎn)则果,數(shù)據(jù)集中存儲(chǔ)于這個(gè)中心節(jié)點(diǎn)中幔翰,并且整個(gè)系統(tǒng)的所有業(yè)務(wù)單元都集中部署在這個(gè)中心節(jié)點(diǎn)上,系統(tǒng)的所有功能均由集中處理西壮。

2遗增、分布式

分布式系統(tǒng)是一個(gè)硬件或者軟件分布在不同的網(wǎng)絡(luò)計(jì)算機(jī)上,彼此之間僅僅通過(guò)消費(fèi)傳遞進(jìn)行通信和協(xié)調(diào)的系統(tǒng)款青。
分布式系統(tǒng)特征:

1做修、分布性
2、對(duì)等性
3抡草、并發(fā)性
4饰及、缺乏全球時(shí)鐘(由于分布式系統(tǒng)由一些列的空間上任意分布的多個(gè)進(jìn)程組成,具有分布性康震,很難定義兩個(gè)事件究竟是誰(shuí)先誰(shuí)后)
5燎含、故障總是會(huì)發(fā)生

分布式系統(tǒng)典型難題:

1、通信問(wèn)題
2腿短、網(wǎng)絡(luò)分區(qū)(當(dāng)網(wǎng)絡(luò)發(fā)生異常時(shí)候屏箍,只有部分節(jié)點(diǎn)進(jìn)行正常通信,另一些節(jié)點(diǎn)不可用橘忱,網(wǎng)絡(luò)分區(qū)嚴(yán)重情況下面會(huì)導(dǎo)致“腦裂”)
3赴魁、三態(tài)(成功、失敗鹦付、超時(shí))
4尚粘、節(jié)點(diǎn)故障

二、CAP理論和BASE理論

  • 分布式事物:指事物參與者敲长、支持事物的服務(wù)器郎嫁、資源服務(wù)器以及事物管理器分別于分布式系統(tǒng)的不同節(jié)點(diǎn)之上。通常一個(gè)分布式事物中會(huì)涉及對(duì)多個(gè)數(shù)據(jù)源或者業(yè)務(wù)系統(tǒng)的操作祈噪。
  • 本地事物可以采用ACID模型保證數(shù)據(jù)的嚴(yán)格一致性泽铛。但在分布式系統(tǒng)中,實(shí)現(xiàn)事物的嚴(yán)格一致性會(huì)和服務(wù)的可用性產(chǎn)生沖突辑鲤,這是有分布式系統(tǒng)的特征決定的盔腔。因此,在可用性和一致性之間永遠(yuǎn)無(wú)法存在一個(gè)兩全其美的方案月褥,于是如何構(gòu)建一個(gè)兼顧可用性和一致性的分布式系統(tǒng)成為一個(gè)難題弛随,因此出現(xiàn)了諸如CAP和BASE這樣的分布式經(jīng)典理論。
1宁赤、CAP理論
  • CAP 定理(CAP theorem)又被稱作布魯爾定理(Brewer's theorem)舀透,是加州大學(xué)伯克利分校的計(jì)算機(jī)科學(xué)家埃里克·布魯爾(Eric Brewer)在 2000 年的 ACM PODC 上提出的一個(gè)猜想。2002 年决左,麻省理工學(xué)院的賽斯·吉爾伯特(Seth Gilbert)和南香倒唬·林奇(Nancy Lynch)發(fā)表了布魯爾猜想的證明,使之成為分布式計(jì)算領(lǐng)域公認(rèn)的一個(gè)定理佛猛。對(duì)于設(shè)計(jì)分布式系統(tǒng)的架構(gòu)師來(lái)說(shuō)惑芭,CAP 是必須掌握的理論。

在一個(gè)分布式系統(tǒng)(指互相連接并共享數(shù)據(jù)的節(jié)點(diǎn)的集合)中继找,當(dāng)涉及讀寫操作時(shí)遂跟,只能保證一致性(Consistence)、可用性(Availability)婴渡、分區(qū)容錯(cuò)性(Partition Tolerance)三者中的兩個(gè)漩勤,另外一個(gè)必須被犧牲。

(1)一致性

一致性指數(shù)據(jù)在多個(gè)副本之間是否能夠保持一致性的特性缩搅。在一致性的需求下越败,當(dāng)一個(gè)系統(tǒng)在數(shù)據(jù)一致的狀態(tài)下執(zhí)行了更新操作后,應(yīng)該保證系統(tǒng)的數(shù)據(jù)任然處于一致的狀態(tài)硼瓣。布魯爾提到對(duì)某個(gè)指定的客戶端來(lái)說(shuō)究飞,讀操作保證能夠返回最新的寫操作結(jié)果。

  • 在分布式系統(tǒng)中如果能夠針對(duì)一個(gè)數(shù)據(jù)項(xiàng)的更新操作執(zhí)行成功后堂鲤,所有用戶都可以讀取到其最新的值亿傅,那么這樣的系統(tǒng)就被認(rèn)為具有強(qiáng)一致性。

(2)可用性

可用性指系統(tǒng)提供的服務(wù)必須一致處于可用的狀態(tài)瘟栖,對(duì)于用戶的每一個(gè)操作請(qǐng)求總是能夠在有限的時(shí)間內(nèi)(指用戶的一個(gè)操作葵擎,系統(tǒng)必須能夠在指定的時(shí)間內(nèi)返回對(duì)應(yīng)的處理結(jié)果,如果超過(guò)了這個(gè)時(shí)間半哟,系統(tǒng)就認(rèn)為不可用)****返回結(jié)果(返回結(jié)果是可用性的另一個(gè)重要指標(biāo)酬滤,要求系統(tǒng)在完成對(duì)用戶請(qǐng)求處理后签餐,返回一個(gè)正常的響應(yīng)結(jié)果,失敗或者成功盯串,而不是一個(gè)困惑的結(jié)果)氯檐。

(3)分區(qū)容錯(cuò)性

  • 網(wǎng)絡(luò)分區(qū)指在分布式系統(tǒng)中,不同節(jié)點(diǎn)分布在不同的子網(wǎng)絡(luò)(機(jī)房或者異地網(wǎng)絡(luò)等)中体捏,由于一些特殊的原因?qū)е逻@些網(wǎng)絡(luò)之間出現(xiàn)網(wǎng)絡(luò)不連通的狀態(tài)冠摄,但是各個(gè)子網(wǎng)絡(luò)的內(nèi)部網(wǎng)絡(luò)是正常的,從而導(dǎo)致整個(gè)系統(tǒng)的網(wǎng)絡(luò)呼喊經(jīng)被切分為若干個(gè)孤立的區(qū)域几缭。

分區(qū)容錯(cuò)性約束了一個(gè)分布式系統(tǒng)需要具有如下特征:分布式系統(tǒng)在遇到任何網(wǎng)絡(luò)分區(qū)故障的時(shí)候河泳,仍熱能夠保證對(duì)外提供滿足一致性或可用性的服務(wù),除非整合網(wǎng)絡(luò)環(huán)境發(fā)生了故障年栓。

(4)總結(jié)

  • 在分布式環(huán)境中拆挥,我們會(huì)發(fā)現(xiàn)必須選擇 P(分區(qū)容忍)要素,因?yàn)榫W(wǎng)絡(luò)本身無(wú)法做到 100% 可靠韵洋,有可能出故障竿刁,所以分區(qū)是一個(gè)必然的現(xiàn)象。也就是說(shuō)分區(qū)容錯(cuò)性是分布式系統(tǒng)的一個(gè)最基本要求搪缨。
  • 在CAP理論中食拜,不能同時(shí)滿足一致性、分區(qū)容忍性副编、可用性负甸,而分區(qū)容忍性優(yōu)勢(shì)分布式系統(tǒng)的基本要求,因此在架構(gòu)設(shè)計(jì)的時(shí)候只能在CA或者CP中取舍痹届,也就是只能在一致性或者可用性之間取舍呻待。


    CP系統(tǒng)

    AP系統(tǒng)

(5)CAP理論中幾個(gè)重要的細(xì)節(jié)

  • CAP 關(guān)注的粒度是數(shù)據(jù),而不是整個(gè)系統(tǒng)队腐。C 與 A 之間的取舍可以在同一系統(tǒng)內(nèi)以非常細(xì)小的粒度反復(fù)發(fā)生蚕捉,而每一次的決策可能因?yàn)榫唧w的操作,乃至因?yàn)闋可娴教囟ǖ臄?shù)據(jù)或用戶而有所不同柴淘。但在實(shí)際設(shè)計(jì)過(guò)程中迫淹,每個(gè)系統(tǒng)不可能只處理一種數(shù)據(jù),而是包含多種類型的數(shù)據(jù)为严,有的數(shù)據(jù)必須選擇 CP敛熬,有的數(shù)據(jù)必須選擇 AP。而如果我們做設(shè)計(jì)時(shí)第股,從整個(gè)系統(tǒng)的角度去選擇 CP 還是 AP应民,就會(huì)發(fā)現(xiàn)顧此失彼,無(wú)論怎么做都是有問(wèn)題的。(以一個(gè)最簡(jiǎn)單的用戶管理系統(tǒng)為例诲锹,用戶管理系統(tǒng)包含用戶賬號(hào)數(shù)據(jù)(用戶 ID繁仁、密碼)、用戶信息數(shù)據(jù)(昵稱辕狰、興趣改备、愛好控漠、性別蔓倍、自我介紹等)。通常情況下盐捷,用戶賬號(hào)數(shù)據(jù)會(huì)選擇 CP偶翅,而用戶信息數(shù)據(jù)會(huì)選擇 AP,如果限定整個(gè)系統(tǒng)為 CP碉渡,則不符合用戶信息數(shù)據(jù)的應(yīng)用場(chǎng)景聚谁;如果限定整個(gè)系統(tǒng)為 AP,則又不符合用戶賬號(hào)數(shù)據(jù)的應(yīng)用場(chǎng)景滞诺。)
  • CAP 是忽略網(wǎng)絡(luò)延遲的形导。意味著,CAP 理論中的 C 在實(shí)踐中是不可能完美實(shí)現(xiàn)的习霹,在數(shù)據(jù)復(fù)制的過(guò)程中朵耕,節(jié)點(diǎn) A 和節(jié)點(diǎn) B 的數(shù)據(jù)并不一致。
  • 正常運(yùn)行情況下淋叶,不存在 CP 和 AP 的選擇阎曹,可以同時(shí)滿足 CA。CAP 理論告訴我們分布式系統(tǒng)只能選擇 CP 或者 AP煞檩,但其實(shí)這里的前提是系統(tǒng)發(fā)生了“分區(qū)”現(xiàn)象处嫌。如果系統(tǒng)沒有發(fā)生分區(qū)現(xiàn)象,也就是說(shuō) P 不存在的時(shí)候(節(jié)點(diǎn)間的網(wǎng)絡(luò)連接一切正常)斟湃,我們沒有必要放棄 C 或者 A熏迹,應(yīng)該 C 和 A 都可以保證,這就要求架構(gòu)設(shè)計(jì)的時(shí)候既要考慮分區(qū)發(fā)生時(shí)選擇 CP 還是 AP凝赛,也要考慮分區(qū)沒有發(fā)生時(shí)如何保證 CA注暗。(同樣以用戶管理系統(tǒng)為例,即使是實(shí)現(xiàn) CA哄酝,不同的數(shù)據(jù)實(shí)現(xiàn)方式也可能不一樣:用戶賬號(hào)數(shù)據(jù)可以采用“消息隊(duì)列”的方式來(lái)實(shí)現(xiàn) CA友存,因?yàn)橄㈥?duì)列可以比較好地控制實(shí)時(shí)性,但實(shí)現(xiàn)起來(lái)就復(fù)雜一些陶衅;而用戶信息數(shù)據(jù)可以采用“數(shù)據(jù)庫(kù)同步”的方式來(lái)實(shí)現(xiàn) CA屡立,因?yàn)閿?shù)據(jù)庫(kù)的方式雖然在某些場(chǎng)景下可能延遲較高,但使用起來(lái)簡(jiǎn)單。)
  • 放棄并不等于什么都不做膨俐,需要為分區(qū)恢復(fù)后做準(zhǔn)備勇皇。
2、BASE理論
  • BASE 是基本可用(Basically Available)焚刺、軟狀態(tài)( Soft State)敛摘、最終一致性( Eventual Consistency)三個(gè)短語(yǔ)的簡(jiǎn)寫。BASE理論是對(duì)CAP中一致性和可用性權(quán)衡的結(jié)果乳愉,是基于CAP定力逐步演化而來(lái)的兄淫,是源于大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實(shí)踐的總結(jié)蔓姚。其核心思想:無(wú)法做到強(qiáng)一致性捕虽,但是每一個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性坡脐。

(1)基本可用

基本可用指分布式系統(tǒng)在出現(xiàn)不可預(yù)知的故障時(shí)候泄私,允許損失部分可用性,保證核心服務(wù)可用备闲。響應(yīng)時(shí)間上的損失(正常0.5ms之內(nèi)的故障時(shí)候響應(yīng)延時(shí)為1-2秒了)和功能上的損失(秒殺時(shí)候的降級(jí)數(shù)據(jù))

(2)弱狀態(tài)

也稱軟狀態(tài)晌端,指允許系統(tǒng)中的數(shù)據(jù)存在中間狀態(tài),并認(rèn)為該中間狀態(tài)的存在不會(huì)影響系統(tǒng)的整體可用性恬砂,即允許系統(tǒng)在不同節(jié)點(diǎn)的數(shù)據(jù)副本之間進(jìn)行數(shù)據(jù)同步的過(guò)程中存在延時(shí)咧纠。

(3)最終一致性

最終一致性強(qiáng)調(diào)的是系統(tǒng)中所有的數(shù)據(jù)副本,在進(jìn)過(guò)一段時(shí)間的同步后觉既,最終能夠達(dá)到一個(gè)一致的狀態(tài)惧盹。最終一致性需要保證數(shù)據(jù)最終能夠一致而不需要保證數(shù)據(jù)實(shí)時(shí)的一致性。

  • 在沒有發(fā)生故障的前提下瞪讼,數(shù)據(jù)的一致性狀態(tài)的時(shí)間延時(shí)钧椰,取決于網(wǎng)絡(luò)延遲,系統(tǒng)負(fù)載符欠,數(shù)據(jù)恢復(fù)策略等等因素嫡霞。

(4)總結(jié)

  • BASE 理論本質(zhì)上是對(duì) CAP 的延伸和補(bǔ)充,更具體地說(shuō)希柿,是對(duì) CAP 中 AP 方案的一個(gè)補(bǔ)充诊沪。其基本思路就是:通過(guò)業(yè)務(wù),犧牲強(qiáng)一致性而獲得可用性曾撤,并允許數(shù)據(jù)在一段時(shí)間內(nèi)是不一致的端姚,但是最終達(dá)到一致性狀態(tài)。

三挤悉、思考:按照CAP理論如何設(shè)計(jì)一個(gè)電商系統(tǒng)渐裸?

  • 首先個(gè)電商網(wǎng)站核心模塊有用戶,訂單,商品昏鹃,支付尚氛,促銷管理

1、對(duì)于用戶模塊洞渤,包括登錄阅嘶,個(gè)人設(shè)置,個(gè)人訂單载迄,購(gòu)物車讯柔,收藏夾等,這些模塊保證AP宪巨,數(shù)據(jù)短時(shí)間不一致不影響使用磷杏。
2溜畅、訂單模塊的下單付款扣減庫(kù)存操作是整個(gè)系統(tǒng)的核心捏卓,CA都需要保證,極端情況下面犧牲A保證C
3慈格、商品模塊的商品上下架和庫(kù)存管理保證CP
4怠晴、搜索功能因?yàn)楸旧砭筒皇菍?shí)時(shí)性非常高的模塊,所以保證AP就可以了浴捆。
5蒜田、促銷是短時(shí)間的數(shù)據(jù)不一致,結(jié)果就是優(yōu)惠信息看不到选泻,但是已有的優(yōu)惠要保證可用冲粤,而且優(yōu)惠可以提前預(yù)計(jì)算,所以可以保證AP页眯。
6梯捕、支付這一塊是獨(dú)立的系統(tǒng),或者使用第三方的支付寶窝撵,微信傀顾。其實(shí)CAP是由第三方來(lái)保證的,支付系統(tǒng)是一個(gè)對(duì)CAP要求極高的系統(tǒng)碌奉,C是必須要保證的短曾,AP中A相對(duì)更重要,不能因?yàn)榉謪^(qū)赐劣,導(dǎo)致所有人都不能支付

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嫉拐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子魁兼,更是在濱河造成了極大的恐慌婉徘,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異判哥,居然都是意外死亡献雅,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門塌计,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挺身,“玉大人,你說(shuō)我怎么就攤上這事锌仅≌录兀” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵热芹,是天一觀的道長(zhǎng)贱傀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伊脓,這世上最難降的妖魔是什么府寒? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮报腔,結(jié)果婚禮上株搔,老公的妹妹穿的比我還像新娘。我一直安慰自己纯蛾,他們只是感情好纤房,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翻诉,像睡著了一般炮姨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碰煌,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天舒岸,我揣著相機(jī)與錄音,去河邊找鬼拄查。 笑死吁津,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的堕扶。 我是一名探鬼主播碍脏,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼稍算!你這毒婦竟也來(lái)了典尾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糊探,失蹤者是張志新(化名)和其女友劉穎钾埂,沒想到半個(gè)月后河闰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褥紫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年姜性,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片髓考。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡部念,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出氨菇,到底是詐尸還是另有隱情儡炼,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布查蓉,位于F島的核電站乌询,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豌研。R本人自食惡果不足惜妹田,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望聂沙。 院中可真熱鬧秆麸,春花似錦、人聲如沸及汉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坷随。三九已至,卻和暖如春驻龟,著一層夾襖步出監(jiān)牢的瞬間温眉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工翁狐, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留类溢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓露懒,卻偏偏與公主長(zhǎng)得像闯冷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子懈词,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345