CAP理論

CAP分布式理論

2002年CAP理論正式成為分布式計(jì)算領(lǐng)域的公認(rèn)定理

CAP指一致性(Consisitency),可用性(Avaliability),分區(qū)容忍性(Partition tolerance)下圖可以清晰的闡述三者之江的關(guān)系,一個(gè)分布式系統(tǒng)最多能同時(shí)滿足其中的兩項(xiàng)。

  1. 傳統(tǒng)關(guān)系數(shù)據(jù)庫的ACID模型具有高一致性+可用性,很難滿足分區(qū)容忍性

    • 原子性 一個(gè)事務(wù)要么成功,要么失敗,不存在中間不確定的狀態(tài)
    • 一致性 事務(wù)的起始和完成,數(shù)據(jù)庫的狀態(tài)應(yīng)該保持一致
    • 隔離性 事務(wù)假設(shè)只有自己在數(shù)據(jù)庫中進(jìn)行操作,彼此不知曉
    • Durability 一旦完成,不能反悔
  2. BASE模型具有可用性+分區(qū)容忍性,犧牲了高一致性

    • Basiclly avaliable 基本可用,支持分區(qū)失敗
    • Soft 軟狀態(tài) 狀態(tài)可以在一段時(shí)間能不一致
    • Eventually consistent 最終一致就可以,不需要時(shí)刻保持一致

CAP定義

1. 一致性是指更新操作完成并返回客戶端完成后,所有節(jié)點(diǎn)在同一只時(shí)間的數(shù)據(jù)完全一致

一致性是指在一個(gè)時(shí)間窗口內(nèi),讓用戶盡量感受不到這個(gè)窗口的存在,通常時(shí)間取決于服務(wù)端是通過數(shù)據(jù)的多份異步復(fù)制來實(shí)現(xiàn)系統(tǒng)的高可用和數(shù)據(jù)的最終一致性。

對于一致性,應(yīng)該從客戶端和服務(wù)端去考慮。從客戶端來看,一致性是指在并發(fā)訪問時(shí),如何保證讀取到的數(shù)據(jù)是最新的。從服務(wù)端來看,怎樣可以快速復(fù)制更新的數(shù)據(jù)到整個(gè)系統(tǒng),也就是盡量使時(shí)間窗口盡可能的短。

從服務(wù)端來看,如何盡快將更新后的值分發(fā)到整個(gè)系統(tǒng),降低達(dá)到最終一致性的時(shí)間窗口,是提高系統(tǒng)可用性和用戶體驗(yàn)的根本,分布式系統(tǒng)需要注意以下幾點(diǎn):

- N-復(fù)本數(shù)
- W-更新數(shù)據(jù)時(shí)需要完成的節(jié)點(diǎn)數(shù)
- R-讀取數(shù)據(jù)時(shí)需要讀取的節(jié)點(diǎn)數(shù)

如果W+R>N,寫的節(jié)點(diǎn)和讀的節(jié)點(diǎn)重疊,則是強(qiáng)一致性。例如對于典型的一主一備同步復(fù)制的關(guān)系型數(shù)據(jù)庫,N=2,W=2,R=1,則不管讀的是主庫還是備庫的數(shù)據(jù),都是一致的。

如果W+R<=N,則是弱一致性。例如對于一主一備異步復(fù)制的關(guān)系型數(shù)據(jù)庫,N=2,W=1,R=1,則如果讀的是備庫,就可能無法讀取主庫已經(jīng)更新過的數(shù)據(jù),所以是弱一致性。

最終一致性保證在一段時(shí)候后獲取的值時(shí)更新后的值

2. 可用性是指服務(wù)一致可用,而且是正常響應(yīng)時(shí)間

對于一個(gè)可用性分布式系統(tǒng),非故障節(jié)點(diǎn)必須對每一個(gè)請求作出響應(yīng),也就是說系統(tǒng)必須最終終止,當(dāng)這是一個(gè)分區(qū)容忍系統(tǒng)時(shí),即使發(fā)生嚴(yán)重的網(wǎng)絡(luò)故障,也必須響應(yīng)請求。當(dāng)出現(xiàn)用戶操作失敗時(shí),可用性很差。

3. 分區(qū)容忍性是指分布式系統(tǒng)某些節(jié)點(diǎn)或網(wǎng)絡(luò)故障時(shí),系統(tǒng)仍然可以對外提供服務(wù)

總結(jié)

對于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場景,主機(jī)眾多、部署分散,而且現(xiàn)在的集群規(guī)模越來越大,所以節(jié)點(diǎn)故障、網(wǎng)絡(luò)故障是常態(tài),而且要保證服務(wù)可用性達(dá)到N個(gè)9,即保證P和A,舍棄C(退而求其次保證最終一致性)。雖然某些地方會影響客戶體驗(yàn),但沒達(dá)到造成用戶流程的嚴(yán)重程度。對于涉及到錢財(cái)這樣不能有一絲讓步的場景,C必須保證。網(wǎng)絡(luò)發(fā)生故障寧可停止服務(wù),這是保證CA,舍棄P。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CAP理論斷言任何基于網(wǎng)絡(luò)的數(shù)據(jù)共享系統(tǒng),最多只能滿足數(shù)據(jù)一致性、可用性、分區(qū)容忍性三要素中的兩個(gè)要素。但是通過顯...
    他山之石頭閱讀 1,450評論 1 4
  • 英文版:http://www.julianbrowne.com/article/viewer/brewers-ca...
    程序猿胖子閱讀 3,360評論 1 6
  • CAP理論概述 一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)、可用性(Availability)...
    我要當(dāng)老司機(jī)閱讀 690評論 0 1
  • 游泳游到一半肚子痛 女生事就是多 只能提前離場了... 學(xué)習(xí)進(jìn)展:看了一天的經(jīng)濟(jì)學(xué),特別有感覺,學(xué)習(xí)了cobb-D...
    28歲的櫻桃丸子想要變身閱讀 295評論 2 1
  • 今天晚上睡覺的時(shí)候,多多從床上摔了下來。我抱起他的時(shí)候還一直哭一直哭,嘔了牛奶晚餐吃的韭菜葉子,我的衣服也跟著遭殃...
    胖多閱讀 170評論 0 0

友情鏈接更多精彩內(nèi)容