精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

關(guān)于Zookeeper的分布式事務(wù),你懂嗎?

開源 分布式
事務(wù)提供一種機(jī)制將一個(gè)活動(dòng)涉及的所有操作納入到一個(gè)不可分割的執(zhí)行單元,組成事務(wù)的所有操作只有在所有操作均能正常執(zhí)行的情況下方能提交,只要其中任一操作執(zhí)行失敗,都將導(dǎo)致整個(gè)事務(wù)的回滾。

 前言

不知道你是否遇到過這樣的情況,去小賣鋪買東西,付了錢,但是店主因?yàn)樘幚砹艘恍┢渌拢尤煌浤愀读隋X,又叫你重新付。又或者在網(wǎng)上購物明明已經(jīng)扣款,但是卻告訴我沒有發(fā)生交易。這一系列情況都是因?yàn)闆]有事務(wù)導(dǎo)致的。這說明了事務(wù)在生活中的一些重要性。有了事務(wù),你去小賣鋪買東西,那就是一手交錢一手交貨。有了事務(wù),你去網(wǎng)上購物,扣款即產(chǎn)生訂單交易。

[[282777]]

事務(wù)的具體定義

事務(wù)提供一種機(jī)制將一個(gè)活動(dòng)涉及的所有操作納入到一個(gè)不可分割的執(zhí)行單元,組成事務(wù)的所有操作只有在所有操作均能正常執(zhí)行的情況下方能提交,只要其中任一操作執(zhí)行失敗,都將導(dǎo)致整個(gè)事務(wù)的回滾。簡(jiǎn)單地說,事務(wù)提供一種“要么什么都不做,要么做全套(All or Nothing)”機(jī)制。

數(shù)據(jù)庫本地事務(wù)

ACID

說到數(shù)據(jù)庫事務(wù)就不得不說,數(shù)據(jù)庫事務(wù)中的四大特性,ACID:

A:原子性(Atomicity)

一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個(gè)事務(wù)從來沒有執(zhí)行過一樣。

就像你買東西要么交錢收貨一起都執(zhí)行,要么要是發(fā)不出貨,就退錢。

C:一致性(Consistency)

事務(wù)的一致性指的是在一個(gè)事務(wù)執(zhí)行之前和執(zhí)行之后數(shù)據(jù)庫都必須處于一致性狀態(tài)。如果事務(wù)成功地完成,那么系統(tǒng)中所有變化將正確地應(yīng)用,系統(tǒng)處于有效狀態(tài)。如果在事務(wù)中出現(xiàn)錯(cuò)誤,那么系統(tǒng)中的所有變化將自動(dòng)地回滾,系統(tǒng)返回到原始狀態(tài)。

I:隔離性(Isolation)

指的是在并發(fā)環(huán)境中,當(dāng)不同的事務(wù)同時(shí)操縱相同的數(shù)據(jù)時(shí),每個(gè)事務(wù)都有各自的完整數(shù)據(jù)空間。由并發(fā)事務(wù)所做的修改必須與任何其他并發(fā)事務(wù)所做的修改隔離。事務(wù)查看數(shù)據(jù)更新時(shí),數(shù)據(jù)所處的狀態(tài)要么是另一事務(wù)修改它之前的狀態(tài),要么是另一事務(wù)修改它之后的狀態(tài),事務(wù)不會(huì)查看到中間狀態(tài)的數(shù)據(jù)。

打個(gè)比方,你買東西這個(gè)事情,是不影響其他人的。

D:持久性(Durability)

指的是只要事務(wù)成功結(jié)束,它對(duì)數(shù)據(jù)庫所做的更新就必須永久保存下來。即使發(fā)生系統(tǒng)崩潰,重新啟動(dòng)數(shù)據(jù)庫系統(tǒng)后,數(shù)據(jù)庫還能恢復(fù)到事務(wù)成功結(jié)束時(shí)的狀態(tài)。

打個(gè)比方,你買東西的時(shí)候需要記錄在賬本上,即使老板忘記了那也有據(jù)可查。

InnoDB實(shí)現(xiàn)原理

InnoDB是mysql的一個(gè)存儲(chǔ)引擎,大部分人對(duì)mysql都比較熟悉,這里簡(jiǎn)單介紹一下數(shù)據(jù)庫事務(wù)實(shí)現(xiàn)的一些基本原理,在本地事務(wù)中,服務(wù)和資源在事務(wù)的包裹下可以看做是一體的:

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

我們的本地事務(wù)由資源管理器進(jìn)行管理:

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

而事務(wù)的ACID是通過InnoDB日志和鎖來保證。事務(wù)的隔離性是通過數(shù)據(jù)庫鎖的機(jī)制實(shí)現(xiàn)的,持久性通過redo log(重做日志)來實(shí)現(xiàn),原子性和一致性通過Undo log來實(shí)現(xiàn)。

UndoLog的原理很簡(jiǎn)單,為了滿足事務(wù)的原子性,在操作任何數(shù)據(jù)之前,首先將數(shù)據(jù)備份到一個(gè)地方(這個(gè)存儲(chǔ)數(shù)據(jù)備份的地方稱為UndoLog)。然后進(jìn)行數(shù)據(jù)的修改。如果出現(xiàn)了錯(cuò)誤或者用戶執(zhí)行了ROLLBACK語句,系統(tǒng)可以利用Undo Log中的備份將數(shù)據(jù)恢復(fù)到事務(wù)開始之前的狀態(tài)。

和Undo Log相反,RedoLog記錄的是新數(shù)據(jù)的備份。在事務(wù)提交前,只要將RedoLog持久化即可,不需要將數(shù)據(jù)持久化。當(dāng)系統(tǒng)崩潰時(shí),雖然數(shù)據(jù)沒有持久化,但是RedoLog已經(jīng)持久化。系統(tǒng)可以根據(jù)RedoLog的內(nèi)容,將所有數(shù)據(jù)恢復(fù)到最新的狀態(tài)。 對(duì)具體實(shí)現(xiàn)過程有興趣的同學(xué)可以去自行搜索擴(kuò)展。

分布式事務(wù)

什么是分布式事務(wù)

分布式事務(wù)就是指事務(wù)的參與者、支持事務(wù)的服務(wù)器、資源服務(wù)器以及事務(wù)管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點(diǎn)之上。簡(jiǎn)單的說,就是一次大的操作由不同的小操作組成,這些小的操作分布在不同的服務(wù)器上,且屬于不同的應(yīng)用,分布式事務(wù)需要保證這些小操作要么全部成功,要么全部失敗。本質(zhì)上來說,分布式事務(wù)就是為了保證不同數(shù)據(jù)庫的數(shù)據(jù)一致性。

分布式事務(wù)產(chǎn)生的原因

從上面本地事務(wù)來看,我們可以看為兩塊,一個(gè)是service產(chǎn)生多個(gè)節(jié)點(diǎn),另一個(gè)是resource產(chǎn)生多個(gè)節(jié)點(diǎn)。

service多個(gè)節(jié)點(diǎn)

隨著互聯(lián)網(wǎng)快速發(fā)展,微服務(wù),SOA等服務(wù)架構(gòu)模式正在被大規(guī)模的使用,舉個(gè)簡(jiǎn)單的例子,一個(gè)公司之內(nèi),用戶的資產(chǎn)可能分為好多個(gè)部分,比如余額,積分,優(yōu)惠券等等。在公司內(nèi)部有可能積分功能由一個(gè)微服務(wù)團(tuán)隊(duì)維護(hù),優(yōu)惠券又是另外的團(tuán)隊(duì)維護(hù)

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

這樣的話就無法保證積分扣減了之后,優(yōu)惠券能否扣減成功。

resource多個(gè)節(jié)點(diǎn)

同樣的,互聯(lián)網(wǎng)發(fā)展得太快了,我們的Mysql一般來說裝千萬級(jí)的數(shù)據(jù)就得進(jìn)行分庫分表,對(duì)于一個(gè)支付寶的轉(zhuǎn)賬業(yè)務(wù)來說,你給的朋友轉(zhuǎn)錢,有可能你的數(shù)據(jù)庫是在北京,而你的朋友的錢是存在上海,所以我們依然無法保證他們能同時(shí)成功。

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

分布式事務(wù)的基礎(chǔ)

從上面來看分布式事務(wù)是隨著互聯(lián)網(wǎng)高速發(fā)展應(yīng)運(yùn)而生的,這是一個(gè)必然的我們之前說過數(shù)據(jù)庫的ACID四大特性,已經(jīng)無法滿足我們分布式事務(wù),這個(gè)時(shí)候又有一些新的大佬提出一些新的理論:

CAP

CAP定理,又被叫作布魯爾定理。對(duì)于設(shè)計(jì)分布式系統(tǒng)來說(不僅僅是分布式事務(wù))的架構(gòu)師來說,CAP就是你的入門理論。

C (一致性):對(duì)某個(gè)指定的客戶端來說,讀操作能返回最新的寫操作。對(duì)于數(shù)據(jù)分布在不同節(jié)點(diǎn)上的數(shù)據(jù)上來說,如果在某個(gè)節(jié)點(diǎn)更新了數(shù)據(jù),那么在其他節(jié)點(diǎn)如果都能讀取到這個(gè)最新的數(shù)據(jù),那么就稱為強(qiáng)一致,如果有某個(gè)節(jié)點(diǎn)沒有讀取到,那就是分布式不一致。

A (可用性):非故障的節(jié)點(diǎn)在合理的時(shí)間內(nèi)返回合理的響應(yīng)(不是錯(cuò)誤和超時(shí)的響應(yīng))。可用性的兩個(gè)關(guān)鍵一個(gè)是合理的時(shí)間,一個(gè)是合理的響應(yīng)。合理的時(shí)間指的是請(qǐng)求不能無限被阻塞,應(yīng)該在合理的時(shí)間給出返回。合理的響應(yīng)指的是系統(tǒng)應(yīng)該明確返回結(jié)果并且結(jié)果是正確的,這里的正確指的是比如應(yīng)該返回50,而不是返回40。

P (分區(qū)容錯(cuò)性):當(dāng)出現(xiàn)網(wǎng)絡(luò)分區(qū)后,系統(tǒng)能夠繼續(xù)工作。打個(gè)比方,這里個(gè)集群有多臺(tái)機(jī)器,有臺(tái)機(jī)器網(wǎng)絡(luò)出現(xiàn)了問題,但是這個(gè)集群仍然可以正常工作。

熟悉CAP的人都知道,三者不能共有,如果感興趣可以搜索CAP的證明,在分布式系統(tǒng)中,網(wǎng)絡(luò)無法100%可靠,分區(qū)其實(shí)是一個(gè)必然現(xiàn)象,如果我們選擇了CA而放棄了P,那么當(dāng)發(fā)生分區(qū)現(xiàn)象時(shí),為了保證一致性,這個(gè)時(shí)候必須拒絕請(qǐng)求,但是A又不允許,所以分布式系統(tǒng)理論上不可能選擇CA架構(gòu),只能選擇CP或者AP架構(gòu)。

對(duì)于CP來說,放棄可用性,追求一致性和分區(qū)容錯(cuò)性,我們的zookeeper其實(shí)就是追求的強(qiáng)一致。

對(duì)于AP來說,放棄一致性(這里說的一致性是強(qiáng)一致性),追求分區(qū)容錯(cuò)性和可用性,這是很多分布式系統(tǒng)設(shè)計(jì)時(shí)的選擇,后面的BASE也是根據(jù)AP來擴(kuò)展。

順便一提,CAP理論中是忽略網(wǎng)絡(luò)延遲,也就是當(dāng)事務(wù)提交時(shí),從節(jié)點(diǎn)A復(fù)制到節(jié)點(diǎn)B,但是在現(xiàn)實(shí)中這個(gè)是明顯不可能的,所以總會(huì)有一定的時(shí)間是不一致。同時(shí)CAP中選擇兩個(gè),比如你選擇了CP,并不是叫你放棄A。因?yàn)镻出現(xiàn)的概率實(shí)在是太小了,大部分的時(shí)間你仍然需要保證CA。就算分區(qū)出現(xiàn)了你也要為后來的A做準(zhǔn)備,比如通過一些日志的手段,是其他機(jī)器回復(fù)至可用。

BASE

BASE 是 Basically Available(基本可用)、Soft state(軟狀態(tài))和 Eventually consistent (最終一致性)三個(gè)短語的縮寫。是對(duì)CAP中AP的一個(gè)擴(kuò)展

基本可用:分布式系統(tǒng)在出現(xiàn)故障時(shí),允許損失部分可用功能,保證核心功能可用。

軟狀態(tài):允許系統(tǒng)中存在中間狀態(tài),這個(gè)狀態(tài)不影響系統(tǒng)可用性,這里指的是CAP中的不一致。

最終一致:最終一致是指經(jīng)過一段時(shí)間后,所有節(jié)點(diǎn)數(shù)據(jù)都將會(huì)達(dá)到一致。

BASE解決了CAP中理論沒有網(wǎng)絡(luò)延遲,在BASE中用軟狀態(tài)和最終一致,保證了延遲后的一致性。BASE和 ACID 是相反的,它完全不同于ACID的強(qiáng)一致性模型,而是通過犧牲強(qiáng)一致性來獲得可用性,并允許數(shù)據(jù)在一段時(shí)間內(nèi)是不一致的,但最終達(dá)到一致狀態(tài)。

分布式事務(wù)解決方案

有了上面的理論基礎(chǔ)后,這里介紹開始介紹幾種常見的分布式事務(wù)的解決方案。

是否真的要分布式事務(wù)

在說方案之前,首先你一定要明確你是否真的需要分布式事務(wù)?

上面說過出現(xiàn)分布式事務(wù)的兩個(gè)原因,其中有個(gè)原因是因?yàn)槲⒎?wù)過多。我見過太多團(tuán)隊(duì)一個(gè)人維護(hù)幾個(gè)微服務(wù),太多團(tuán)隊(duì)過度設(shè)計(jì),搞得所有人疲勞不堪,而微服務(wù)過多就會(huì)引出分布式事務(wù),這個(gè)時(shí)候我不會(huì)建議你去采用下面任何一種方案,而是請(qǐng)把需要事務(wù)的微服務(wù)聚合成一個(gè)單機(jī)服務(wù),使用數(shù)據(jù)庫的本地事務(wù)。因?yàn)椴徽撊魏我环N方案都會(huì)增加你系統(tǒng)的復(fù)雜度,這樣的成本實(shí)在是太高了,千萬不要因?yàn)樽非竽承┰O(shè)計(jì),而引入不必要的成本和復(fù)雜度。

如果你確定需要引入分布式事務(wù)可以看看下面幾種常見的方案。

2PC

說到2PC就不得不聊數(shù)據(jù)庫分布式事務(wù)中的 XA Transactions。

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

在XA協(xié)議中分為兩階段:

第一階段:事務(wù)管理器要求每個(gè)涉及到事務(wù)的數(shù)據(jù)庫預(yù)提交(precommit)此操作,并反映是否可以提交.

第二階段:事務(wù)協(xié)調(diào)器要求每個(gè)數(shù)據(jù)庫提交數(shù)據(jù),或者回滾數(shù)據(jù)。

優(yōu)點(diǎn): 盡量保證了數(shù)據(jù)的強(qiáng)一致,實(shí)現(xiàn)成本較低,在各大主流數(shù)據(jù)庫都有自己實(shí)現(xiàn),對(duì)于MySQL是從5.5開始支持。

缺點(diǎn):

  • 單點(diǎn)問題:事務(wù)管理器在整個(gè)流程中扮演的角色很關(guān)鍵,如果其宕機(jī),比如在第一階段已經(jīng)完成,在第二階段正準(zhǔn)備提交的時(shí)候事務(wù)管理器宕機(jī),資源管理器就會(huì)一直阻塞,導(dǎo)致數(shù)據(jù)庫無法使用。
  • 同步阻塞:在準(zhǔn)備就緒之后,資源管理器中的資源一直處于阻塞,直到提交完成,釋放資源。
  • 數(shù)據(jù)不一致:兩階段提交協(xié)議雖然為分布式數(shù)據(jù)強(qiáng)一致性所設(shè)計(jì),但仍然存在數(shù)據(jù)不一致性的可能,比如在第二階段中,假設(shè)協(xié)調(diào)者發(fā)出了事務(wù)commit的通知,但是因?yàn)榫W(wǎng)絡(luò)問題該通知僅被一部分參與者所收到并執(zhí)行了commit操作,其余的參與者則因?yàn)闆]有收到通知一直處于阻塞狀態(tài),這時(shí)候就產(chǎn)生了數(shù)據(jù)的不一致性。

總的來說,XA協(xié)議比較簡(jiǎn)單,成本較低,但是其單點(diǎn)問題,以及不能支持高并發(fā)(由于同步阻塞)依然是其最大的弱點(diǎn)。

TCC

關(guān)于TCC(Try-Confirm-Cancel)的概念,最早是由Pat Helland于2007年發(fā)表的一篇名為《Life beyond Distributed Transactions:an Apostate’s Opinion》的論文提出。 TCC事務(wù)機(jī)制相比于上面介紹的XA,解決了其幾個(gè)缺點(diǎn):

1.解決了協(xié)調(diào)者單點(diǎn),由主業(yè)務(wù)方發(fā)起并完成這個(gè)業(yè)務(wù)活動(dòng)。業(yè)務(wù)活動(dòng)管理器也變成多點(diǎn),引入集群。 2.同步阻塞:引入超時(shí),超時(shí)后進(jìn)行補(bǔ)償,并且不會(huì)鎖定整個(gè)資源,將資源轉(zhuǎn)換為業(yè)務(wù)邏輯形式,粒度變小。

3.數(shù)據(jù)一致性,有了補(bǔ)償機(jī)制之后,由業(yè)務(wù)活動(dòng)管理器控制一致性

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

對(duì)于TCC的解釋:

  • Try階段:嘗試執(zhí)行,完成所有業(yè)務(wù)檢查(一致性),預(yù)留必須業(yè)務(wù)資源(準(zhǔn)隔離性)
  • Confirm階段:確認(rèn)執(zhí)行真正執(zhí)行業(yè)務(wù),不作任何業(yè)務(wù)檢查,只使用Try階段預(yù)留的業(yè)務(wù)資源,Confirm操作滿足冪等性。要求具備冪等設(shè)計(jì),Confirm失敗后需要進(jìn)行重試。
  • Cancel階段:取消執(zhí)行,釋放Try階段預(yù)留的業(yè)務(wù)資源 Cancel操作滿足冪等性Cancel階段的異常和Confirm階段異常處理方案基本上一致。

舉個(gè)簡(jiǎn)單的例子如果你用100元買了一瓶水, Try階段:你需要向你的錢包檢查是否夠100元并鎖住這100元,水也是一樣的。

如果有一個(gè)失敗,則進(jìn)行cancel(釋放這100元和這一瓶水),如果cancel失敗不論什么失敗都進(jìn)行重試cancel,所以需要保持冪等。

如果都成功,則進(jìn)行confirm,確認(rèn)這100元扣,和這一瓶水被賣,如果confirm失敗無論什么失敗則重試(會(huì)依靠活動(dòng)日志進(jìn)行重試)

對(duì)于TCC來說適合一些:

  • 強(qiáng)隔離性,嚴(yán)格一致性要求的活動(dòng)業(yè)務(wù)。
  • 執(zhí)行時(shí)間較短的業(yè)務(wù)

此方案的核心是將需要分布式處理的任務(wù)通過消息日志的方式來異步執(zhí)行。消息日志可以存儲(chǔ)到本地文本、數(shù)據(jù)庫或消息隊(duì)列,再通過業(yè)務(wù)規(guī)則自動(dòng)或人工發(fā)起重試。人工重試更多的是應(yīng)用于支付場(chǎng)景,通過對(duì)賬系統(tǒng)對(duì)事后問題的處理。

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

對(duì)于本地消息隊(duì)列來說核心是把大事務(wù)轉(zhuǎn)變?yōu)樾∈聞?wù)。還是舉上面用100元去買一瓶水的例子。

1.當(dāng)你扣錢的時(shí)候,你需要在你扣錢的服務(wù)器上新增加一個(gè)本地消息表,你需要把你扣錢和寫入減去水的庫存到本地消息表放入同一個(gè)事務(wù)(依靠數(shù)據(jù)庫本地事務(wù)保證一致性。

2.這個(gè)時(shí)候有個(gè)定時(shí)任務(wù)去輪詢這個(gè)本地事務(wù)表,把沒有發(fā)送的消息,扔給商品庫存服務(wù)器,叫他減去水的庫存,到達(dá)商品服務(wù)器之后這個(gè)時(shí)候得先寫入這個(gè)服務(wù)器的事務(wù)表,然后進(jìn)行扣減,扣減成功后,更新事務(wù)表中的狀態(tài)。

3.商品服務(wù)器通過定時(shí)任務(wù)掃描消息表或者直接通知扣錢服務(wù)器,扣錢服務(wù)器本地消息表進(jìn)行狀態(tài)更新。

4.針對(duì)一些異常情況,定時(shí)掃描未成功處理的消息,進(jìn)行重新發(fā)送,在商品服務(wù)器接到消息之后,首先判斷是否是重復(fù)的,如果已經(jīng)接收,在判斷是否執(zhí)行,如果執(zhí)行在馬上又進(jìn)行通知事務(wù),如果未執(zhí)行,需要重新執(zhí)行需要由業(yè)務(wù)保證冪等,也就是不會(huì)多扣一瓶水。

本地消息隊(duì)列是BASE理論,是最終一致模型,適用于對(duì)一致性要求不高的。實(shí)現(xiàn)這個(gè)模型時(shí)需要注意重試的冪等。

MQ事務(wù)

在RocketMQ中實(shí)現(xiàn)了分布式事務(wù),實(shí)際上其實(shí)是對(duì)本地消息表的一個(gè)封裝,將本地消息表移動(dòng)到了MQ內(nèi)部,下面簡(jiǎn)單介紹一下MQ事務(wù),如果想對(duì)其詳細(xì)了解可以參考: www.jianshu.com/p/453c6e7ff…

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

基本流程如下: 第一階段Prepared消息,會(huì)拿到消息的地址。

第二階段執(zhí)行本地事務(wù)。

第三階段通過第一階段拿到的地址去訪問消息,并修改狀態(tài)。消息接受者就能使用這個(gè)消息。

如果確認(rèn)消息失敗,在RocketMq Broker中提供了定時(shí)掃描沒有更新狀態(tài)的消息,如果有消息沒有得到確認(rèn),會(huì)向消息發(fā)送者發(fā)送消息,來判斷是否提交,在rocketmq中是以listener的形式給發(fā)送者,用來處理。

 

關(guān)于Zookeeper的分布式事務(wù),我寫了全網(wǎng)最詳細(xì)的解讀

 

如果消費(fèi)超時(shí),則需要一直重試,消息接收端需要保證冪等。如果消息消費(fèi)失敗,這個(gè)就需要人工進(jìn)行處理,因?yàn)檫@個(gè)概率較低,如果為了這種小概率時(shí)間而設(shè)計(jì)這個(gè)復(fù)雜的流程反而得不償失

Saga事務(wù)

Saga是30年前一篇數(shù)據(jù)庫倫理提到的一個(gè)概念。其核心思想是將長事務(wù)拆分為多個(gè)本地短事務(wù),由Saga事務(wù)協(xié)調(diào)器協(xié)調(diào),如果正常結(jié)束那就正常完成,如果某個(gè)步驟失敗,則根據(jù)相反順序一次調(diào)用補(bǔ)償操作。 Saga的組成:

每個(gè)Saga由一系列sub-transaction Ti 組成 每個(gè)Ti 都有對(duì)應(yīng)的補(bǔ)償動(dòng)作Ci,補(bǔ)償動(dòng)作用于撤銷Ti造成的結(jié)果,這里的每個(gè)T,都是一個(gè)本地事務(wù)。 可以看到,和TCC相比,Saga沒有“預(yù)留 try”動(dòng)作,它的Ti就是直接提交到庫。

Saga的執(zhí)行順序有兩種:

T1, T2, T3, ..., Tn

T1, T2, ..., Tj, Cj,..., C2, C1,其中0 < j < n Saga定義了兩種恢復(fù)策略:

向后恢復(fù),即上面提到的第二種執(zhí)行順序,其中j是發(fā)生錯(cuò)誤的sub-transaction,這種做法的效果是撤銷掉之前所有成功的sub-transation,使得整個(gè)Saga的執(zhí)行結(jié)果撤銷。 向前恢復(fù),適用于必須要成功的場(chǎng)景,執(zhí)行順序是類似于這樣的:T1, T2, ..., Tj(失敗), Tj(重試),..., Tn,其中j是發(fā)生錯(cuò)誤的sub-transaction。該情況下不需要Ci。

這里要注意的是,在saga模式中不能保證隔離性,因?yàn)闆]有鎖住資源,其他事務(wù)依然可以覆蓋或者影響當(dāng)前事務(wù)。

還是拿100元買一瓶水的例子來說,這里定義

T1=扣100元 T2=給用戶加一瓶水 T3=減庫存一瓶水

C1=加100元 C2=給用戶減一瓶水 C3=給庫存加一瓶水

我們一次進(jìn)行T1,T2,T3如果發(fā)生問題,就執(zhí)行發(fā)生問題的C操作的反向。 上面說到的隔離性的問題會(huì)出現(xiàn)在,如果執(zhí)行到T3這個(gè)時(shí)候需要執(zhí)行回滾,但是這個(gè)用戶已經(jīng)把水喝了(另外一個(gè)事務(wù)),回滾的時(shí)候就會(huì)發(fā)現(xiàn),無法給用戶減一瓶水了。這就是事務(wù)之間沒有隔離性的問題

可以看見saga模式?jīng)]有隔離性的影響還是較大,可以參照華為的解決方案:從業(yè)務(wù)層面入手加入一 Session 以及鎖的機(jī)制來保證能夠串行化操作資源。也可以在業(yè)務(wù)層面通過預(yù)先凍結(jié)資金的方式隔離這部分資源, 最后在業(yè)務(wù)操作的過程中可以通過及時(shí)讀取當(dāng)前狀態(tài)的方式獲取到最新的更新。

最后

還是那句話,能不用分布式事務(wù)就不用,如果非得使用的話,結(jié)合自己的業(yè)務(wù)分析,看看自己的業(yè)務(wù)比較適合哪一種,是在乎強(qiáng)一致,還是最終一致即可。上面對(duì)解決方案只是一些簡(jiǎn)單介紹,如果真正的想要落地,其實(shí)每種方案需要思考的地方都非常多,復(fù)雜度都比較大,所以最后再次提醒一定要判斷好是否使用分布式事務(wù)。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2019-10-10 09:16:34

Zookeeper架構(gòu)分布式

2022-01-26 13:46:40

分布式事務(wù)集合,這

2022-06-27 08:21:05

Seata分布式事務(wù)微服務(wù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)

2017-10-24 11:28:23

Zookeeper分布式鎖架構(gòu)

2015-05-18 09:59:48

ZooKeeper分布式計(jì)算Hadoop

2022-08-26 00:02:03

RocketMQ單體架構(gòu)MQ

2021-11-05 07:18:15

分布式事務(wù)業(yè)務(wù)

2025-05-13 02:10:00

2009-06-19 15:28:31

JDBC分布式事務(wù)

2021-09-29 09:07:37

分布式架構(gòu)系統(tǒng)

2009-09-18 15:10:13

分布式事務(wù)LINQ TO SQL

2021-02-28 07:49:28

Zookeeper分布式

2021-10-25 10:21:59

ZK分布式鎖ZooKeeper

2015-07-15 10:42:38

分布式分布式事務(wù)集群

2021-06-01 07:57:42

Zookeeper分布式系統(tǒng)

2023-09-11 15:40:43

鍵值存儲(chǔ)云服務(wù)

2023-12-26 08:59:52

分布式場(chǎng)景事務(wù)機(jī)制

2021-02-01 09:35:53

關(guān)系型數(shù)據(jù)庫模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

91成人在线看| 欧美激情精品久久久久久变态 | 91精品久久久久久粉嫩| 成人精品免费看| 欧美在线www| 91制片厂在线| 黑色丝袜福利片av久久| 欧美性jizz18性欧美| 午夜精品一区二区在线观看| 国产aⅴ爽av久久久久成人| 亚洲国产黄色| 久久精品亚洲一区| 亚洲午夜久久久久久久久红桃| 国产精品亚洲成在人线| 亚洲444eee在线观看| 亚洲欧洲日韩精品| 天天操天天射天天舔| 国产综合色产在线精品| 人体精品一二三区| 激情综合五月网| 日韩大片在线观看| 日韩av网址在线| 成人在线短视频| 成人国产一区| 一道本成人在线| 成人免费a级片| 亚洲s色大片| 久久久久久久久一| 国产精品日韩二区| 国产熟女一区二区三区四区| 日韩成人伦理电影在线观看| 亚洲 日韩 国产第一| 极品盗摄国产盗摄合集| 日本久久精品| 亚洲欧美日韩在线高清直播| 黄色av电影网站| 999色成人| 欧美日韩一本到| 欧美精品无码一区二区三区| 高潮在线视频| 亚洲不卡在线观看| av日韩在线看| √天堂资源地址在线官网| 久久久高清一区二区三区| 极品日韩久久| 男人天堂网在线视频| 国产精品一区在线观看乱码| 国产精品日韩欧美| 中文字幕在线播出| 日本伊人色综合网| 国产精品久久久久久一区二区| 草久视频在线观看| 国产免费成人| 日本一区二区在线播放| 五月婷婷视频在线| 免费在线观看成人av| 国产91精品高潮白浆喷水| 日本免费观看视| 在线日韩中文| 2019中文字幕在线观看| 久久久久久久极品| 亚洲欧美成人| 国产成人精品网站| 最近日韩免费视频| 久久国产视频网| 91天堂在线视频| 99久久精品国产一区二区成人| 精品一区二区三区影院在线午夜 | 国产精品天干天干在线综合| 一本久道久久综合| 在线看三级电影| 亚洲超丰满肉感bbw| 亚洲 高清 成人 动漫| 成人欧美大片| 欧美性三三影院| 亚洲一区二区三区四区精品| 午夜日韩影院| 精品亚洲男同gayvideo网站| 熟女少妇内射日韩亚洲| 水蜜桃久久夜色精品一区| 久久国产精品免费视频| 国产精品1000| 欧美日韩一区二区区| 久操视频在线观看| 亚洲一区国产视频| 99999精品视频| av成人在线播放| 91精品黄色片免费大全| 娇妻高潮浓精白浆xxⅹ| 免费视频亚洲| 欧美老少配视频| 四虎成人永久免费视频| 欧美a级一区二区| 亚洲最大福利视频| 色综合成人av| 日韩码欧中文字| 免费观看国产精品视频| 福利视频一区| 亚洲成人黄色在线| 娇小11一12╳yⅹ╳毛片| 欧美午夜精品| 国产精品三级在线| 高清一区二区三区四区| 国产视频亚洲色图| 国产成人艳妇aa视频在线 | 在线观看免费视频黄| 国产日产精品_国产精品毛片| 美女精品视频一区| 一级黄色大片视频| 高清不卡一二三区| 五月天久久综合网| av2020不卡| 欧美另类久久久品| 草草影院第一页| 国内精品嫩模av私拍在线观看| 国产精品视频26uuu| 亚洲人妻一区二区| 一区二区国产盗摄色噜噜| 国产xxxxx视频| 精品女人视频| 超薄丝袜一区二区| 欧美性猛交xxxx乱大交hd| 成人午夜看片网址| 欧美日韩一区二区三区电影| 欧亚一区二区| 亚洲精品一区中文字幕乱码| 精品99在线观看| 极品尤物av久久免费看| 清纯唯美一区二区三区| 黄色视屏在线免费观看| 日韩欧美在线一区二区三区| 美女网站视频色| 久久一本综合频道| 久久免费一区| 日本午夜大片a在线观看| 精品国产青草久久久久福利| 18岁成人毛片| 国产一区二区免费视频| 特级毛片在线免费观看| 日本免费在线一区| 中文字幕视频在线免费欧美日韩综合在线看 | 青青操在线视频| 午夜一区二区三区视频| 性猛交╳xxx乱大交| 欧美成人首页| 91福利入口| 污视频网站在线免费| 日韩视频永久免费| 91日韩中文字幕| 国产精品99久久久久| 超碰超碰超碰超碰超碰| 久久免费精品| 欧美激情区在线播放| 国产chinasex对白videos麻豆| 亚洲色大成网站www久久九九| 玖玖爱视频在线| 四虎成人精品永久免费av九九| 国产精品久久一区主播| a√资源在线| 欧美片网站yy| 内射一区二区三区| 国产精品911| 欧美深夜福利视频| 九九精品久久| 国产欧美日韩最新| 大地资源网3页在线观看| 精品久久久久av影院| 香蕉免费毛片视频| 国产人成亚洲第一网站在线播放 | 国产不卡在线播放| 人妻无码久久一区二区三区免费| 欧美激情影院| 国产精品成人播放| 精产国品自在线www| 日韩免费高清视频| 日韩三级av在线| 国产免费观看久久| 在线免费看v片| 亚洲三级影院| 亚洲高清在线观看一区| 视频在线亚洲| 日韩美女视频免费在线观看| 97人人在线| 精品国产污网站| 97人妻精品视频一区| 亚洲欧美日韩在线播放| 日本黄色录像片| 理论电影国产精品| 黄色www网站| 日韩免费av| 精品国产综合区久久久久久| 成人黄色图片网站| 久久久久久久久综合| 国产中文在线| 精品欧美久久久| 欧美一区二区三区久久久| 亚洲欧美乱综合| www.中文字幕av| 国产精品1区2区| 久久这里只精品| 日韩天天综合| 免费观看国产视频在线| 欧美热在线视频精品999| 亚洲va欧美va在线观看| 成人小电影网站| 欧美高清在线播放| 91欧美在线视频| 日韩激情视频在线播放| 国产情侣av在线| 在线看日韩精品电影| 久久高清无码视频| 国产精品色呦呦| 亚洲av片不卡无码久久| 国产精品中文字幕日韩精品| 天天爽天天爽夜夜爽| 99在线|亚洲一区二区| 大桥未久一区二区三区| 成人aaaa| 欧美一级二级三级九九九| 成人h动漫精品一区二区器材| 国产精品偷伦视频免费观看国产| 极品美鲍一区| 欧美放荡办公室videos4k| 午夜小视频在线| 亚洲女人被黑人巨大进入al| 亚洲卡一卡二卡三| 6080国产精品一区二区| a片在线免费观看| 色综合久久九月婷婷色综合| 国产精品99精品| 一二三区精品视频| avove在线播放| 亚洲色图在线看| 亚洲视频重口味| 国产精品久久久爽爽爽麻豆色哟哟| 97伦伦午夜电影理伦片| 91丨porny丨蝌蚪视频| 成人做爰www看视频软件| 国产麻豆一精品一av一免费| 亚洲免费成人在线视频| 另类调教123区| 日韩欧美亚洲另类| 毛片一区二区三区| 午夜免费福利视频在线观看| 奇米精品一区二区三区在线观看| 国产又粗又长又大的视频| 日本亚洲最大的色成网站www| 欧美 激情 在线| 老司机午夜免费精品视频| 老熟妇仑乱视频一区二区| 日本一不卡视频| 岛国av免费在线| 国产一区二区视频在线播放| 中文字幕日韩久久| 精品中文字幕一区二区| 无套内谢丰满少妇中文字幕| 国产精品77777竹菊影视小说| 亚洲熟女乱综合一区二区| 成人手机在线视频| 成人手机在线免费视频| 久久久无码精品亚洲日韩按摩| 熟女高潮一区二区三区| 国产精品污网站| 成熟的女同志hd| 亚洲超碰精品一区二区| 在线免费黄色av| 欧洲精品在线观看| 国产精品九九九九| 精品国产乱码久久久久久老虎| 天天操天天干天天插| 亚洲性生活视频| 久操视频在线免费播放| 国产最新精品视频| 美女福利一区二区| 91精品视频在线播放| 91欧美极品| 日本精品免费| 欧美激情精品久久久六区热门| 免费观看美女裸体网站| 日韩一区欧美二区| 成人免费播放视频| 久久免费电影网| 欧美成人三级视频| 欧美日韩亚洲一区二区| 国产精品无码久久久久成人app| 日韩精品一区二区三区在线| 欧美视频综合| 久久偷看各类女兵18女厕嘘嘘| 电影在线观看一区| 国产精品嫩草影院久久久| 国产精品3区| 欧美精品免费观看二区| 国产精品麻豆久久| 又粗又黑又大的吊av| 精品一区二区三区的国产在线播放| 国产高潮失禁喷水爽到抽搐| 国产亚洲人成网站| 久久精品视频9| 欧美日韩免费一区二区三区| 国精产品一品二品国精品69xx| 在线成人免费网站| 蜜臀av国内免费精品久久久夜夜| 国产suv精品一区二区| 天堂va欧美ⅴa亚洲va一国产| 日本一区网站| 亚洲精品韩国| 日本中文字幕精品| 国产精品亲子伦对白| 91精品国产乱码在线观看| 日韩一级二级三级| 在线日本中文字幕| 日韩av免费在线观看| 动漫3d精品一区二区三区乱码| 先锋影音网一区| 亚洲欧美日韩在线观看a三区 | 国产亚洲欧洲一区高清在线观看| 久久一区二区三| 69p69国产精品| а天堂8中文最新版在线官网| 97精品视频在线观看| 免费一级欧美在线大片| 亚洲一卡二卡三卡| 欧美亚洲三区| 久久久久国产精品区片区无码| 亚洲精品网站在线观看| 中文字幕日韩经典| 国产一区二区久久精品| 中文字幕在线直播| 国产视频一区二区不卡| 欧美日韩国产欧| 日本精品一区在线| 国产精品久久久久久久久晋中| 97人妻一区二区精品视频| 日韩av网址在线| 欧美巨大丰满猛性社交| 国产三区精品| 亚洲国内自拍| 挪威xxxx性hd极品| 亚洲妇女屁股眼交7| 性一交一乱一精一晶| 久久成人这里只有精品| 一区二区三区| 中国老女人av| 国产精品91一区二区| 久草视频免费在线播放| 欧美成人一区二区三区| 欧美亚洲天堂| 国产精品自拍首页| 亚洲精品字幕| 亚洲专区区免费| 91电影在线观看| jizz在线观看中文| 成人精品视频在线| 91精品一区二区三区综合在线爱| 午夜激情视频网| 亚洲最快最全在线视频| 亚洲第一天堂网| 97精品视频在线| 国产一区二区三区91| 亚洲综合欧美在线| 亚洲欧美一区二区三区孕妇| www.精品久久| 欧美亚洲国产另类| 第一sis亚洲原创| 网站在线你懂的| 一区二区三区欧美激情| 天堂在线资源8| 国产精品久久视频| 亚洲精品97| xxxx黄色片| 欧美色手机在线观看| 国产精品va在线观看视色| 国内一区在线| 秋霞av亚洲一区二区三| 麻豆精品一区二区三区视频| 亚洲第一级黄色片| 日韩网站中文字幕| 香蕉视频免费版| 久久人人97超碰com| 国产又色又爽又黄又免费| 欧美激情aaaa| 视频一区中文| 国产一级二级av| 色综合天天在线| 成人看片免费| 欧美大香线蕉线伊人久久| 老司机精品视频导航| 久久久久免费看| 一区二区三区国产视频| 欧美精品三级在线| av片中文字幕| 艳妇臀荡乳欲伦亚洲一区| 黄色在线网站| 国产精品一区视频网站| 另类综合日韩欧美亚洲| 国产精品7777777| 久久视频免费在线播放| 国产精品午夜一区二区三区| 亚洲一区二区偷拍| 在线观看国产一区二区|