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ù)庫(kù)的ACID模型具有高一致性+可用性蒿讥,很難滿足分區(qū)容忍性
- 原子性 一個(gè)事務(wù)要么成功谭溉,要么失敗喘鸟,不存在中間不確定的狀態(tài)
- 一致性 事務(wù)的起始和完成,數(shù)據(jù)庫(kù)的狀態(tài)應(yīng)該保持一致
- 隔離性 事務(wù)假設(shè)只有自己在數(shù)據(jù)庫(kù)中進(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ù)端是通過(guò)數(shù)據(jù)的多份異步復(fù)制來(lái)實(shí)現(xiàn)系統(tǒng)的高可用和數(shù)據(jù)的最終一致性。
對(duì)于一致性,應(yīng)該從客戶端和服務(wù)端去考慮辰狡。從客戶端來(lái)看锋叨,一致性是指在并發(fā)訪問(wèn)時(shí),如何保證讀取到的數(shù)據(jù)是最新的宛篇。從服務(wù)端來(lái)看娃磺,怎樣可以快速?gòu)?fù)制更新的數(shù)據(jù)到整個(gè)系統(tǒng),也就是盡量使時(shí)間窗口盡可能的短叫倍。
從服務(wù)端來(lái)看偷卧,如何盡快將更新后的值分發(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,寫(xiě)的節(jié)點(diǎn)和讀的節(jié)點(diǎn)重疊蚕泽,則是強(qiáng)一致性晌梨。例如對(duì)于典型的一主一備同步復(fù)制的關(guān)系型數(shù)據(jù)庫(kù),N=2,W=2,R=1赛糟,則不管讀的是主庫(kù)還是備庫(kù)的數(shù)據(jù)派任,都是一致的。
如果W+R<=N璧南,則是弱一致性掌逛。例如對(duì)于一主一備異步復(fù)制的關(guān)系型數(shù)據(jù)庫(kù),N=2,W=1,R=1司倚,則如果讀的是備庫(kù)豆混,就可能無(wú)法讀取主庫(kù)已經(jīng)更新過(guò)的數(shù)據(jù),所以是弱一致性动知。
最終一致性保證在一段時(shí)候后獲取的值時(shí)更新后的值
2. 可用性是指服務(wù)一致可用皿伺,而且是正常響應(yīng)時(shí)間
對(duì)于一個(gè)可用性分布式系統(tǒng),非故障節(jié)點(diǎn)必須對(duì)每一個(gè)請(qǐng)求作出響應(yīng)盒粮,也就是說(shuō)系統(tǒng)必須最終終止鸵鸥,當(dāng)這是一個(gè)分區(qū)容忍系統(tǒng)時(shí),即使發(fā)生嚴(yán)重的網(wǎng)絡(luò)故障丹皱,也必須響應(yīng)請(qǐng)求妒穴。當(dāng)出現(xiàn)用戶操作失敗時(shí),可用性很差摊崭。
3. 分區(qū)容忍性是指分布式系統(tǒng)某些節(jié)點(diǎn)或網(wǎng)絡(luò)故障時(shí)讼油,系統(tǒng)仍然可以對(duì)外提供服務(wù)
總結(jié)
對(duì)于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場(chǎng)景,主機(jī)眾多呢簸、部署分散矮台,而且現(xiàn)在的集群規(guī)模越來(lái)越大乏屯,所以節(jié)點(diǎn)故障、網(wǎng)絡(luò)故障是常態(tài)瘦赫,而且要保證服務(wù)可用性達(dá)到N個(gè)9辰晕,即保證P和A,舍棄C(退而求其次保證最終一致性)耸彪。雖然某些地方會(huì)影響客戶體驗(yàn)伞芹,但沒(méi)達(dá)到造成用戶流程的嚴(yán)重程度。對(duì)于涉及到錢(qián)財(cái)這樣不能有一絲讓步的場(chǎng)景蝉娜,C必須保證唱较。網(wǎng)絡(luò)發(fā)生故障寧可停止服務(wù),這是保證CA召川,舍棄P南缓。