cap
分布式系統(tǒng)架構(gòu)理論,定義了三種指標(biāo),理論說(shuō)我們最多只能滿足兩個(gè)。
分布式系統(tǒng)
首先我們這個(gè)理論所說(shuō)的分布式系統(tǒng),是指系統(tǒng)內(nèi)會(huì)共享數(shù)據(jù),互相有連接有交互,才能完成系統(tǒng)功能的的分布式系統(tǒng)。而這個(gè)理論的關(guān)注點(diǎn)是數(shù)據(jù)的讀寫。
三種指標(biāo)
1、 Consistency 一致性:
這里的一致性是針對(duì)于分布式讀寫的。對(duì)于一個(gè)分布式系統(tǒng),當(dāng)一條數(shù)據(jù)寫成功,那么無(wú)論我怎么使用這個(gè)系統(tǒng),我都應(yīng)當(dāng)能馬上讀取到這條最新的數(shù)據(jù)。
不一致性的例子:我更新了一條微博,而我的關(guān)注者還不能看到。
2、 Avalilability 可用性:
是指系統(tǒng)應(yīng)當(dāng)隨時(shí)可用,在reasonable的時(shí)間內(nèi)返回reasonable的結(jié)果。
一個(gè)反例:我更新了一條微博,我的關(guān)注者在刷我微博的時(shí)候顯示對(duì)方正在更新微博,請(qǐng)稍后再試,或者顯示一直在讀取中。
3、 Partition Toleranc 分區(qū)容忍性:
分布式環(huán)境中數(shù)據(jù)必然會(huì)被劃分成多個(gè)區(qū)分到不同的機(jī)器上,不同的機(jī)器之間會(huì)有數(shù)據(jù)交換。
而機(jī)器一多某臺(tái)機(jī)器發(fā)生發(fā)生故障的概率就會(huì)比較高,而且機(jī)器間數(shù)據(jù)的交換依賴于網(wǎng)絡(luò),網(wǎng)絡(luò)也很有可能會(huì)有延時(shí)、丟包之類的問(wèn)題。
分區(qū)容忍性就要求在分布式系統(tǒng)要考慮到分布式環(huán)境的復(fù)雜性的前提下能正常提供服務(wù)。
(原版cap中的p其實(shí)指的是網(wǎng)絡(luò)分區(qū)現(xiàn)象[參考Wiki network partition] ,只由于網(wǎng)絡(luò)設(shè)備的影響,分布式集群被劃分成多個(gè)子網(wǎng),但這樣理解我始終想不通,可能這樣解釋更合理)
三種指標(biāo)的意義
1、 CAP-P:
首先我們來(lái)看分區(qū)容忍性,由于我們討論的就是分布式環(huán)境,我們的系統(tǒng)肯定不能被這網(wǎng)絡(luò)環(huán)境機(jī)器環(huán)境所影響,分區(qū)容忍性就是個(gè)公認(rèn)的前提,要么你就是很多個(gè)單機(jī)提供服務(wù),但那不是分布式。為了實(shí)現(xiàn)分區(qū)容忍性,就需要我們?cè)O(shè)計(jì)多個(gè)數(shù)據(jù)副本,多個(gè)副本還不能在同一臺(tái)機(jī)器上,甚至要在多個(gè)機(jī)房、多個(gè)地區(qū)存放副本。如果有必要機(jī)器之間的網(wǎng)絡(luò)也需要多個(gè)通道,防止網(wǎng)絡(luò)通路出現(xiàn)問(wèn)題。
2、 CAP-CA:

前提環(huán)境保證了,我們就來(lái)討論下讀寫功能。系統(tǒng)的功能無(wú)外乎輸出輸出,也就是讀寫操作咯。對(duì)于讀寫操作我們需要再一致性和可用性之間有所取舍,當(dāng)然并不是完全舍去另一方,而是我們不能完美的同時(shí)實(shí)現(xiàn)C和A。
為啥呢,前提P已經(jīng)說(shuō)了我們需要多副本分布在多機(jī)器上,這副本之間同步數(shù)據(jù)是會(huì)有延時(shí),其次如何保證在寫的同時(shí)(副本未同步完成)我的讀操作可能會(huì)發(fā)生在各個(gè)副本上,那我應(yīng)該如何返回正確的數(shù)據(jù)。所以C和A只能完美保證一個(gè)。
例子
1、 舍C保A(AP)的例子:
比如剛剛的微博這個(gè)例子,我們更新了一條微博,不是所有的人都能馬上刷出來(lái)的,對(duì)于哪些還只能刷出舊的微博數(shù)據(jù)的人來(lái)說(shuō)數(shù)據(jù)就和我真實(shí)的操作不一致了。然而這種業(yè)務(wù)也不需要要求我們強(qiáng)一致性,沒(méi)有刷出我的最新微博,也不是什么大事,大不了認(rèn)為我沒(méi)有更新而已,對(duì)業(yè)務(wù)影響很小。但是呢也不能一直都不一致是吧,所以C還是不能丟的,可以遲到。
2、 舍A保C(CP)的例子:
比如銀行賬戶的例子,大家生活中也許也已經(jīng)注意到了,銀行轉(zhuǎn)賬需要幾個(gè)小時(shí)甚至幾天,都會(huì)顯示正在轉(zhuǎn)賬中。這時(shí)就是視作一種丟失可用性的狀態(tài)。當(dāng)然這是業(yè)務(wù)決定的。
3、 舍P保C又保A的場(chǎng)景:
不是分布式的場(chǎng)景的話,我們可以選擇CA,比如我是個(gè)小銀行,我的轉(zhuǎn)賬功能可以設(shè)計(jì)為多地賬戶不互通,只能本地轉(zhuǎn)賬,只在一臺(tái)服務(wù)器上操作,保證可用性和一致性。但整體來(lái)看可用性和一致性都丟失了。
acid:
通用的關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)理論,需要滿足四種指標(biāo)(具體含義及分布式事務(wù)如何實(shí)現(xiàn),我們?cè)诹粞灾杏懻摪?:
- Atomicity 原子性:
- Consistency 一致性:
- Isolation 獨(dú)立性:
- Durability 持久性:
加我信微 Zeal-Zeng 費(fèi)免拉你進(jìn) 知識(shí)星球、大數(shù)據(jù)社群、眾公號(hào)(曾二爺) 和優(yōu)秀的人一起學(xué)習(xí)