前言
通過前面的研究咙崎,我們了解了分布式系統(tǒng)的基本概念桩盲。與本地事務(wù)不同胳喷,分布式系統(tǒng)之所以被稱為分布式系統(tǒng)湃番,是因?yàn)樘峁┓?wù)的多個(gè)節(jié)點(diǎn)分布在不同的機(jī)器上,通過網(wǎng)絡(luò)相互作用吭露。由于網(wǎng)絡(luò)問題吠撮,整個(gè)系統(tǒng)無(wú)法提供服務(wù)。網(wǎng)絡(luò)因素成為分布式交易考慮的標(biāo)準(zhǔn)之一讲竿。因此泥兰,分布式事務(wù)需要進(jìn)一步的理論基礎(chǔ)。接下來题禀,讓我們學(xué)習(xí)分布式事務(wù)的cap理論鞋诗。
在解釋分布式事務(wù)控制解決方案之前,我們需要學(xué)習(xí)一些基本理論投剥,并通過理論知識(shí)指導(dǎo)我們確定分布式事務(wù)控制的目標(biāo)师脂,從而幫助我們理解每個(gè)解決方案。
1江锨、 CAP理論
CAP是consistency、availability和partition tolerance的縮寫糕篇,分別表示一致性啄育、可用性和分區(qū)容忍性。
為了便于理解CAP理論拌消,我們使用電子商務(wù)系統(tǒng)中的一些業(yè)務(wù)場(chǎng)景來理解CAP挑豌,如下圖所示,這是商品信息管理的執(zhí)行過程:
執(zhí)行過程如下:
(1) 商品請(qǐng)求主數(shù)據(jù)庫(kù)寫入商品信息(添加商品墩崩、修改商品氓英、刪除商品);
(2) 主數(shù)據(jù)庫(kù)成功寫入對(duì)商品和服務(wù)的響應(yīng)鹦筹;
(3) 商品服務(wù)請(qǐng)求從數(shù)據(jù)庫(kù)中讀取商品信息铝阐;
1.1 C - 均勻性
均勻性是寫操作后的讀操作可以讀取到最新的數(shù)據(jù)狀態(tài),當(dāng)數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)時(shí)铐拐,從任意節(jié)點(diǎn)讀取到的數(shù)據(jù)都是最新的狀態(tài)徘键。
上圖中,商品信息的讀寫要滿足均勻性就是要實(shí)現(xiàn)如下目標(biāo):
(1) 如果貨物和服務(wù)成功寫入主數(shù)據(jù)庫(kù)遍蟋,新數(shù)據(jù)將從從數(shù)據(jù)庫(kù)中查詢成功吹害。
(2) 如果商品服務(wù)無(wú)法寫入主數(shù)據(jù)庫(kù),則無(wú)法向從數(shù)據(jù)庫(kù)查詢新數(shù)據(jù)虚青。
如何實(shí)現(xiàn)一致性它呀?
(1) 寫入主數(shù)據(jù)庫(kù)后,需要將數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)。
(2) 寫入主數(shù)據(jù)庫(kù)后纵穿,在同步到從數(shù)據(jù)庫(kù)期間鎖定從數(shù)據(jù)庫(kù)烟号,同步完成后解除鎖定,避免新數(shù)據(jù)庫(kù)寫入成功后從數(shù)據(jù)庫(kù)查詢舊數(shù)據(jù)政恍。
分布式一致性的特點(diǎn):
(1) 由于數(shù)據(jù)同步的過程汪拥,相應(yīng)的寫入操作將被延遲。
(2)為了保證數(shù)據(jù)一致性會(huì)對(duì)資源暫時(shí)鎖定篙耗,待數(shù)據(jù)同步完成釋放鎖定資源迫筑。
(3) 如果節(jié)點(diǎn)請(qǐng)求數(shù)據(jù)同步失敗,它將返回錯(cuò)誤信息宗弯,并且不會(huì)返回舊信息脯燃。
1.2 A-可用性
可用性意味著任何事務(wù)操作都可以獲得相應(yīng)的結(jié)果,而無(wú)需響應(yīng)超時(shí)或響應(yīng)錯(cuò)誤蒙保。
在上圖中辕棚,為了讀取商品信息以滿足可用性,實(shí)現(xiàn)了以下目標(biāo):
(1) 從數(shù)據(jù)庫(kù)接收查詢請(qǐng)求可以立即響應(yīng)數(shù)據(jù)查詢結(jié)果邓厕。
(2) 來自數(shù)據(jù)庫(kù)的查詢不允許響應(yīng)超時(shí)或響應(yīng)錯(cuò)誤逝嚎。
如何實(shí)現(xiàn)可用性?
(1) 寫入主數(shù)據(jù)庫(kù)會(huì)將數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)详恼。
(2) 因?yàn)橐_保從數(shù)據(jù)庫(kù)的可用性补君,所以無(wú)法鎖定從數(shù)據(jù)庫(kù)中的資源。
(3) 如果實(shí)時(shí)數(shù)據(jù)尚未同步昧互,則還應(yīng)從數(shù)據(jù)庫(kù)返回要查詢的數(shù)據(jù)挽铁。即使舊數(shù)據(jù)不可用,也可以根據(jù)約定返回默認(rèn)消息敞掘,但不能返回錯(cuò)誤或相應(yīng)的超時(shí)叽掘。
分布式系統(tǒng)可用性特點(diǎn):
(1) 所有請(qǐng)求都有響應(yīng),并且不會(huì)出現(xiàn)響應(yīng)超時(shí)或響應(yīng)錯(cuò)誤玖雁。
1.3 P-分區(qū)容忍性
通常分布式系統(tǒng)的各個(gè)節(jié)點(diǎn)部署在不同的子網(wǎng)更扁,這就是網(wǎng)絡(luò)分區(qū),不可避免的會(huì)出現(xiàn)由于網(wǎng)絡(luò)問題而導(dǎo)致節(jié)點(diǎn)之間通信失敗茄菊,此時(shí)仍可對(duì)外提供服務(wù)疯潭,這叫分區(qū)容忍性。
上圖中面殖,商品信息讀寫要滿足分區(qū)容忍性就是要實(shí)現(xiàn)如下目標(biāo):
(1) 主數(shù)據(jù)與從數(shù)據(jù)同步失敗不影響讀寫操作竖哩。
(2) 如果一個(gè)節(jié)點(diǎn)掛斷,另一個(gè)節(jié)點(diǎn)提供的外部服務(wù)將不受影響脊僚。
如何實(shí)現(xiàn)分區(qū)容忍性相叁?
(1) 嘗試使用異步而不是同步操作遵绰,例如,使用異步方法將主數(shù)據(jù)庫(kù)中的數(shù)據(jù)同步到從數(shù)據(jù)庫(kù)中增淹,這樣節(jié)點(diǎn)就可以有效地實(shí)現(xiàn)松耦合椿访。
(2) 從數(shù)據(jù)庫(kù)節(jié)點(diǎn)添加,其中一個(gè)節(jié)點(diǎn)掛起其他節(jié)點(diǎn)以提供服務(wù)虑润。
分布式分區(qū)容忍性的特點(diǎn):
(1)分區(qū)容忍性是分布式系統(tǒng)具備的基本能力成玫。
2、 CAP結(jié)合模式
在所有分布式事務(wù)場(chǎng)景中拳喻,由于C和a不能在P的前提下共存哭当,因此不會(huì)同時(shí)出現(xiàn)cap特性。
下圖滿足了P即表示實(shí)現(xiàn)了分區(qū)容忍性:
分區(qū)容忍的含義:
(1) 主數(shù)據(jù)庫(kù)將數(shù)據(jù)從網(wǎng)絡(luò)同步到從數(shù)據(jù)庫(kù)冗澈∏湛保可以認(rèn)為主從數(shù)據(jù)庫(kù)部署在不同的分區(qū)上,通過網(wǎng)絡(luò)進(jìn)行交互亚亲。
(2) 當(dāng)主從數(shù)據(jù)庫(kù)之間的網(wǎng)絡(luò)出現(xiàn)問題時(shí)彻采,主從數(shù)據(jù)庫(kù)提供的服務(wù)不受影響。
(3) 如果一個(gè)節(jié)點(diǎn)掛斷捌归,另一個(gè)節(jié)點(diǎn)提供的服務(wù)將不受影響肛响。
如果要實(shí)現(xiàn)C則必須保證數(shù)據(jù)一致性,在數(shù)據(jù)同步的時(shí)候?yàn)榉乐瓜驈臄?shù)據(jù)庫(kù)查詢的不一致則需要從數(shù)據(jù)庫(kù)鎖定陨溅,待完成同步之后解鎖终惑,如果同步失敗從數(shù)據(jù)庫(kù)要返回錯(cuò)誤信息或超時(shí)信息。
如果要實(shí)現(xiàn)门扇,則必須確保數(shù)據(jù)可用性。您可以隨時(shí)從數(shù)據(jù)庫(kù)查詢數(shù)據(jù)偿渡,并且不能返回錯(cuò)誤信息或超時(shí)信息
通過分析臼寄,在滿足P的前提下,C與a之間存在矛盾溜宽。
因此吉拳,在分布式事務(wù)處理的生產(chǎn)中,需要根據(jù)需要確定cap的哪兩個(gè)方面是滿足的适揉。
1.1 CA結(jié)合
CA結(jié)合就是保證一致性和可用性留攒,放棄區(qū)域公差,即不進(jìn)行分區(qū)嫉嘀,不考慮由于網(wǎng)絡(luò)不通或節(jié)點(diǎn)掛掉的問題炼邀。那么系統(tǒng)將不是一個(gè)標(biāo)準(zhǔn)的分布式系統(tǒng),我們最常用的關(guān)系型數(shù)據(jù)庫(kù)就滿足了CA剪侮。
1.2 CP結(jié)合
CP結(jié)合就是保證一致性和分區(qū)容忍性拭宁,放棄可用性。Zookerper就是追求強(qiáng)一致性,放棄了可用性杰标,還有跨行轉(zhuǎn)賬兵怯,一次轉(zhuǎn)賬請(qǐng)求要等待雙方銀行系統(tǒng)都完成整個(gè)事務(wù)才能完成。
1.3 AP結(jié)合
AP結(jié)合就是保證可用性和分區(qū)容忍性腔剂,放棄一致性媒区。這是分布式系統(tǒng)設(shè)計(jì)時(shí)的選擇。
三掸犬、總結(jié)
通過上面我們學(xué)習(xí)了CAP的基礎(chǔ)理論知識(shí)袜漩,CAP是一個(gè)已經(jīng)證實(shí)的理論:一個(gè)分布式系統(tǒng)做多只能滿足CAP中的兩項(xiàng),為達(dá)到良好的響應(yīng)性能來提高用戶體驗(yàn)登渣,因此一般會(huì)做出如下選擇:保證A和P噪服,舍棄C強(qiáng)一致性,保證最終一致性胜茧。