CAP分布式理論
2002年CAP理論正式成為分布式計(jì)算領(lǐng)域的公認(rèn)定理
CAP指一致性(Consisitency),可用性(Avaliability),分區(qū)容忍性(Partition tolerance)下圖可以清晰的闡述三者之江的關(guān)系,一個(gè)分布式系統(tǒng)最多能同時(shí)滿足其中的兩項(xiàng)。

-
傳統(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 一旦完成,不能反悔
-
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。