CAP組合方式
- 上邊商品管理的例子是否同時(shí)具備CAP呢盯桦?
- 在所有分布式事務(wù)中不會(huì)同時(shí)具備CAP三個(gè)特性拥峦,因?yàn)樵诰邆淞薈和A是不能共存的。
- 比如:
-
下圖滿足了P即表示實(shí)現(xiàn)分區(qū)容錯(cuò):
image - 本圖分區(qū)容錯(cuò)的含義是:
- 1.主數(shù)據(jù)庫(kù)通過(guò)網(wǎng)絡(luò)向從數(shù)據(jù)同步數(shù)據(jù)略号,可以認(rèn)為主數(shù)據(jù)庫(kù)部署在不同的分區(qū),通過(guò)網(wǎng)絡(luò)進(jìn)行交互玄柠。
- 2.當(dāng)主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)之間的網(wǎng)絡(luò)出現(xiàn)問(wèn)題不影響主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)對(duì)外提供服務(wù)。
- 3.其一個(gè)結(jié)點(diǎn)掛掉不影響另一個(gè)結(jié)點(diǎn)對(duì)外提供服務(wù)宫患。
如果要實(shí)現(xiàn)C則必須要保證數(shù)據(jù)一致性这弧,在數(shù)據(jù)同步的時(shí)候?yàn)榉乐瓜驈臄?shù)據(jù)庫(kù)查詢不一致的數(shù)據(jù)則需要將從數(shù)據(jù)庫(kù)數(shù)據(jù)鎖定,待同步完成后解鎖皇帮,如果同步失敗從數(shù)據(jù)庫(kù)要返回錯(cuò)誤信息或超時(shí)信息户矢。
如果要實(shí)現(xiàn)A則必須保證數(shù)據(jù)可用性,不管任何時(shí)候都可以從數(shù)據(jù)查詢數(shù)據(jù)梯浪,則不會(huì)響應(yīng)超時(shí)或返回錯(cuò)誤信息。
通過(guò)分析發(fā)現(xiàn)在滿足P的前提下C和A存在矛盾性礼预。
CAP有哪些組合方式呢虏劲?
- 所以在生產(chǎn)中對(duì)分布式事務(wù)處理時(shí)要根據(jù)需求來(lái)確定滿足CAP的哪兩個(gè)方面。
AP:
- 放棄一致性励堡,追求分區(qū)容錯(cuò)性和可以性。這是很多分布式系統(tǒng)設(shè)計(jì)時(shí)的選擇应结。
- 例如:
- 上邊的商品管理泉唁,完全可以實(shí)現(xiàn)AP,前提是只要用戶可以接收所有查詢的到數(shù)據(jù)在一定時(shí)間內(nèi)不是最新的即可扮休。
- 通過(guò)實(shí)現(xiàn)AP都會(huì)保證最終一致性拴鸵,后面講的BAST理論就是根據(jù)AP來(lái)擴(kuò)展的蜗搔,一些業(yè)務(wù)場(chǎng)景比如:訂單退款侨糟,今日退款成功,明日賬戶到賬不同,只要用戶可以接受在一定時(shí)間內(nèi)到賬即可溶耘。
CP
- 放棄可用性,追求一致性和分區(qū)容錯(cuò)性百新,我們的zookeeper其實(shí)就是追求的強(qiáng)一致性,又比如跨行轉(zhuǎn)賬饭望,一次轉(zhuǎn)賬請(qǐng)求要等待雙方銀行系統(tǒng)都完成整個(gè)事務(wù)才算完成
CA
- 放棄分區(qū)容錯(cuò)性形庭,即不進(jìn)行分區(qū),不考慮由于網(wǎng)絡(luò)不通或結(jié)點(diǎn)掛掉的問(wèn)題斟珊,則可以實(shí)現(xiàn)一致性和可用性富纸。那么系統(tǒng)將不是一個(gè)標(biāo)準(zhǔn)的分布式系統(tǒng)。我們最常的關(guān)系型數(shù)據(jù)庫(kù)就滿足了CA堵漱。
-
上邊的商品管理,如果要實(shí)現(xiàn)CA架構(gòu)如下:
image - 主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)中間不再進(jìn)行數(shù)據(jù)同步勤庐,數(shù)據(jù)庫(kù)可以響應(yīng)每次的查詢請(qǐng)求变过,通過(guò)事務(wù)隔離級(jí)別實(shí)現(xiàn)每個(gè)查詢請(qǐng)求都可以返回最新的數(shù)據(jù)媚狰。
總結(jié)
- 通過(guò)上面我們已經(jīng)學(xué)習(xí)了CAP理論的相關(guān)知識(shí)阔拳,CAP是一個(gè)已經(jīng)被證實(shí)的理論:一個(gè)分布式系統(tǒng)最多只能同時(shí)滿足一致性(Consistency)类嗤,可用性(Availability)和分區(qū)容錯(cuò)性(Partition tolerance)這三項(xiàng)中的兩項(xiàng)辨宠。它可以作為我們進(jìn)行架構(gòu)設(shè)計(jì),技術(shù)選型的考量標(biāo)準(zhǔn)嗤形。對(duì)于大多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場(chǎng)景赋兵,結(jié)點(diǎn)眾多,部署分散叶组,而且現(xiàn)在的集群規(guī)模越來(lái)越大历造,所以節(jié)點(diǎn)故障,網(wǎng)絡(luò)故障是常態(tài)吭产,而且要保證服務(wù)可用性達(dá)到N個(gè)9(99.99...%),并要達(dá)到良好的響應(yīng)性能來(lái)提高用戶體驗(yàn)达吞,因此一般都會(huì)做出如下選擇:保證P和A荒典,舍棄C強(qiáng)一致,保證保證最終一致性覆糟。