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

面試官問我:分布式事務(wù)是什么?

開發(fā) 前端 分布式
事務(wù)其實(shí)大家應(yīng)該不陌生,尤其是對于程序員來說,如果你連事務(wù)都沒聽說過,沒關(guān)系,因?yàn)槟阌龅搅寺斆骱筒胖怯谝惑w的我,事務(wù)其實(shí)就是為了處理多種混合操作,涉及到多方面業(yè)務(wù)的情景

[[403411]]

事務(wù)

事務(wù)其實(shí)大家應(yīng)該不陌生,尤其是對于程序員來說,如果你連事務(wù)都沒聽說過,沒關(guān)系,因?yàn)槟阌龅搅寺斆骱筒胖怯谝惑w的我,事務(wù)其實(shí)就是為了處理多種混合操作,涉及到多方面業(yè)務(wù)的情景

重點(diǎn)是事務(wù)應(yīng)用的場景就是為了解決多種事務(wù)必須要么同時(shí)完成,要么同時(shí)不能完成的場景,也就是做到真正意義上的"同生共死"

嚴(yán)格意義上來說事務(wù)其實(shí)具有原子性、一致性、隔離性和持久性四種特性,也就是大家老生常談的ACID

  • 原子性(Atomicity),可以理解為一個(gè)事務(wù)內(nèi)的所有操作要么都執(zhí)行,要么都不執(zhí)行
  • 一致性(Consistency),可以理解為數(shù)據(jù)是滿足完整性約束的,也就是不會存在中間狀態(tài)的數(shù)據(jù),比如你賬上有400,我賬上有100,你給我打200塊,此時(shí)你賬上的錢應(yīng)該是200,我賬上的錢應(yīng)該是300,不會存在我賬上錢加了,你賬上錢沒扣的中間狀態(tài)
  • 隔離性(Isolation),指的是多個(gè)事務(wù)并發(fā)執(zhí)行的時(shí)候不會互相干擾,即一個(gè)事務(wù)內(nèi)部的數(shù)據(jù)對于其他事務(wù)來說是隔離的
  • 持久性(Durability),指的是一個(gè)事務(wù)完成了之后數(shù)據(jù)就被永遠(yuǎn)保存下來,之后的其他操作或故障都不會對事務(wù)的結(jié)果產(chǎn)生影響

嚴(yán)格意義上來說事務(wù)其實(shí)具有原子性、一致性、隔離性和持久性四種特性,也就是大家老生常談的ACID

其實(shí)在我們印象中,應(yīng)該對這個(gè)事務(wù)再熟悉不過了,大家都知道事務(wù)就是為了使得一些數(shù)據(jù)庫層面的更新操作要么全部成功,要么全部失敗。

不知道大家學(xué)過Redis沒有,如果學(xué)過Redis的其實(shí)可能會有疑問,因?yàn)镽edis的事務(wù)不能保證所有操作要么都執(zhí)行,要么都不執(zhí)行,但是也叫做事務(wù)。Redis其實(shí)在官網(wǎng)就已經(jīng)說明白了,官網(wǎng)中告訴大家事務(wù)中的某個(gè)命令失敗了,之后的命令還是會被處理,Redis不會停止執(zhí)行命令,也就是意味著不會回滾

Redis解釋為什么不支持回滾

他們給出的回的就是首先如果命令出錯(cuò)那就是語法的錯(cuò)誤,是屬于個(gè)人的編程錯(cuò)誤,而且這種情況應(yīng)該被檢測出來,而不是在生產(chǎn)環(huán)境出現(xiàn),于是乎Redis為了速度更快不支持回滾操作

感覺很有道理的樣子,但是又有點(diǎn)不對勁

好了,這下大家都知道事務(wù)是啥了,那么我們一起來看看分布式事務(wù)吧

分布式事務(wù)

剛才說的事務(wù)都是屬于單體程序中,單機(jī)中這樣是沒問題的,通過普通的事務(wù)操作就可以來解決;當(dāng)我們的系統(tǒng)逐漸變大,日益變強(qiáng)的同時(shí),并發(fā)量和系統(tǒng)都隨之而增加,當(dāng)涉及到多個(gè)系統(tǒng)之間的配合來完成一個(gè)事務(wù)的時(shí)候,這就比較難辦了,因?yàn)闊o法直接通過一個(gè)系統(tǒng)的數(shù)據(jù)庫來完成

假設(shè)現(xiàn)在有訂單系統(tǒng)、扣款系統(tǒng)、積分系統(tǒng),這是屬于三個(gè)系統(tǒng),也就是分別在不同的數(shù)據(jù)庫中,但是我需要保證三個(gè)系統(tǒng)中的服務(wù)要么全部成功、要么全部失敗,其實(shí)像這種設(shè)計(jì)到多個(gè)庫、多個(gè)系統(tǒng)之間的事務(wù)操作,也就是分布式事務(wù)了

分布式事務(wù)其實(shí)說簡單也簡單,其實(shí)就是有多個(gè)本地事務(wù)組合而成,對于分布式事務(wù)而言幾乎滿足不了ACID,其實(shí)對于單機(jī)事務(wù)大多是情況下也是無法全部滿足ACID的,否則哪里來的四種隔離級別?所以更別說分布在不同數(shù)據(jù)庫、不同系統(tǒng)之間的分布式事務(wù)了

分布式事務(wù)大致可以分為六種,但是其實(shí)這六種又可以按照三種思想來分類,接下來一起看看吧

2PC和3PC是一種強(qiáng)一致性事務(wù),不過還是有數(shù)據(jù)的不一致、阻塞等風(fēng)險(xiǎn),而且只能應(yīng)用在數(shù)據(jù)庫層面;而TCC是一種補(bǔ)償性事務(wù)的思想,適用的范圍應(yīng)該是比較廣,不過這種補(bǔ)償性機(jī)制一般對業(yè)務(wù)的侵入性比較大,每一個(gè)操作都需要實(shí)現(xiàn)對應(yīng)的三種方法;還有一種思想就是努力實(shí)現(xiàn)最終一致性事務(wù),有本地消息、事務(wù)消息、和最大努力通知這三種方法,都是實(shí)現(xiàn)最終一致性事務(wù),因此適用于于一些對于時(shí)間不敏感的業(yè)務(wù)

大致了解了這三類,接下來來細(xì)細(xì)學(xué)習(xí)每一種吧

  • 2PC二階段提交:準(zhǔn)備階段、提交階段

2PC,又叫做二階段提交,二階段指的是準(zhǔn)備階段和提交兩個(gè)階段

二階段提交屬于一種強(qiáng)一致性的設(shè)計(jì),2PC引入一個(gè)事務(wù)協(xié)調(diào)者的角色來協(xié)調(diào)管理各參與者的提交和回滾機(jī)制,我們來看下具體流程

準(zhǔn)備階段協(xié)調(diào)者會向各個(gè)參與者發(fā)送準(zhǔn)備的命令,這個(gè)準(zhǔn)備其實(shí)就是準(zhǔn)備環(huán)境,可以理解成提交之前的準(zhǔn)備工作

同步的等待所有的資源的響應(yīng)之后,就到了萬事俱備,只欠提交的狀態(tài)了

提交階段,提交階段并不一定是提交事務(wù),也有可能是回滾事務(wù),如果第一階段都準(zhǔn)備成功,則第二階段的提交就是提交事務(wù);同理如果第一階段未全部準(zhǔn)備成功,則第二階段提交的就是回滾事務(wù)了。假設(shè)第一階段都準(zhǔn)備成功,則協(xié)調(diào)者向所有參與者發(fā)送提交命令,然后接下來等待所有參與者都成功之后,返回事務(wù)執(zhí)行成功

假設(shè)第一階段有部分參與者返回失敗的話,那么協(xié)調(diào)者則會向所有參與者都發(fā)送回滾事務(wù)的請求,即類似上圖,向全部參與者發(fā)送回滾事務(wù)

說到這里其實(shí)有些小伙伴已經(jīng)開始有疑問了,我知道了第一階段有失敗的如何處理了,但是如果第二階段出現(xiàn)失敗了咋整呢

其實(shí)這里分了兩種情況,分別是第二階段執(zhí)行的是提交階段、第二階段執(zhí)行的是回滾操作,這兩種情況的處理方式其實(shí)是一樣的,都是屬于不斷地重試,直到重試成功;對于提交來說,可以根據(jù)業(yè)務(wù)場景,執(zhí)行一定次數(shù)的重試之后,嘗試回滾;但是對于回滾操作,總不能執(zhí)行成功操作吧

所以,如果第二階段是回滾操作有失敗,當(dāng)失敗次數(shù)達(dá)到一定次數(shù)的時(shí)候,最好的方法就是人工介入了

提交流程大致也分析的差不多了,接下來一起看看細(xì)節(jié)部分,2PC可以看成同步阻塞協(xié)議,同步阻塞的等待所有參與者的第一階段都有響應(yīng)之后,才會進(jìn)行第二階段的操作;對于Java基礎(chǔ)很熟悉的小伙伴是不是很快想起來Java并發(fā)包中的一個(gè)工具類CountDownLatch,以及功能類似的CyclicBarrier,忘記的趕緊回憶下

其實(shí)2PC中對于這里的同步阻塞是有超時(shí)機(jī)制的,協(xié)調(diào)者等待參與者的響應(yīng)超時(shí)的情況下,會默認(rèn)失敗,然后協(xié)調(diào)者直接向所有參與者發(fā)起回滾的命令,知道這次事務(wù)失敗

上面這些都是基于參與者的角度來考慮的,那如果協(xié)調(diào)者出問題了呢

協(xié)調(diào)者如果是單點(diǎn)的,出現(xiàn)故障之后,可能會出現(xiàn)一些系統(tǒng)的問題,我們從流程的角度分析下:

準(zhǔn)備階段命令未發(fā)出,協(xié)調(diào)者故障,事務(wù)還沒開始,問題不大;

準(zhǔn)備階段命令發(fā)出了,協(xié)調(diào)者故障,事務(wù)開始了,無論參與者都是成功還是失敗,最終情況都很糟糕,因?yàn)閰⑴c者無法等到下一步的指令了,也就是卡碟了,不僅事務(wù)無法執(zhí)行,還會鎖定一些公用資源而阻塞其它系統(tǒng);準(zhǔn)備階段命令發(fā)出,全部成功,第二階段執(zhí)行提交階段命令發(fā)出,這種情況也是不行的,因?yàn)橐部赡芤驗(yàn)榉謪^(qū)和網(wǎng)絡(luò)阻塞,某些參與者未收到提交命令,理想情況下如果參與者一次性全部收到提交命令,但是參與者有可能提交失敗,這樣還是需要重試,此時(shí)協(xié)調(diào)者掛了,也是不行

準(zhǔn)備階段命令發(fā)出,部分失敗,第二階段回滾命令發(fā)出,其實(shí)和上面情況類似,也是會出現(xiàn)各式各樣的問題

既然單點(diǎn)協(xié)調(diào)者不行,那就來個(gè)多個(gè)的吧,通過選舉機(jī)制再選一個(gè)新協(xié)調(diào)者

如果都處于第一階段,其實(shí)都還好,事務(wù)還沒提交,直接都會滾就好了;如果處于第二階段,假設(shè)參與者都沒掛,此時(shí)新協(xié)調(diào)者可以向所有參與者來進(jìn)一步確認(rèn)他們自身的情況來推斷下一步該如何操作,如果個(gè)別參與者掛了,就比較尷尬了。比如協(xié)調(diào)者發(fā)送了回滾的命令,此時(shí)第一個(gè)參與者收到了并執(zhí)行了,然后協(xié)調(diào)者和第一個(gè)參與者都掛掉了,此時(shí)其它參與者都沒收到請求,然后新協(xié)調(diào)者來了,它詢問了其它的參與者都回答OK,但是它不知道其中第一個(gè)參與者掛了,此時(shí)要是按照全部OK來處理,直接發(fā)送提交命令,就糟糕了,這不是我們想要的結(jié)果

其實(shí)雖然2PC協(xié)議上沒說,但是在實(shí)現(xiàn)的時(shí)候我們需要靈活的讓協(xié)調(diào)者將自己發(fā)過的請求在哪些地方都記一下,也就類似于日志記錄,這樣新的協(xié)調(diào)者來的時(shí)候就不、知道此時(shí)該不該發(fā)了

即使協(xié)調(diào)者知道自己應(yīng)該發(fā)提交還是回滾請求,但是在參與者也一起掛了的情況下也是沒用的,因?yàn)閰f(xié)調(diào)者無法知道參與者在掛之前有沒有提交事務(wù),其實(shí)這里最靠譜的方法,就是對每一步都進(jìn)行相應(yīng)的日志記錄,重要的步驟最好還是強(qiáng)綁定日志記錄的,否則操作成功了,日志記錄失敗那也很糟糕,總之就是要考慮各種極端的情況,盡最大努力去做到每個(gè)細(xì)節(jié)都考慮到

2PC是一種盡量保證強(qiáng)一致性的分布式事務(wù),因?yàn)樗峭阶枞模阶枞鸵馕吨谀承┣闆r下會出現(xiàn)鎖定資源的情況,而且單點(diǎn)一旦出現(xiàn)故障,就會造成資源鎖定的情況

以下代碼取自 <<Distributed System: Principles and Paradigms>>

  1. 協(xié)調(diào)者: 
  2.  
  3.  
  4.  
  5.     write START_2PC to local log; //開始事務(wù) 
  6.     multicast VOTE_REQUEST to all participants; //廣播通知參與者投票 
  7.     while not all votes have been collected { 
  8.         wait for any incoming vote; 
  9.         if timeout { //協(xié)調(diào)者超時(shí) 
  10.             write GLOBAL_ABORT to local log; //寫日志 
  11.             multicast GLOBAL_ABORT to all participants; //通知事務(wù)中斷 
  12.             exit; 
  13.         } 
  14.         record vote; 
  15.     }   //如果所有參與者都o(jì)k 
  16.     if all participants sent VOTE_COMMIT and coordinator votes COMMIT { 
  17.         write GLOBAL_COMMIT to local log; 
  18.         multicast GLOBAL_COMMIT to all participants; 
  19.     } else { 
  20.         write GLOBAL_ABORT to local log; 
  21.         multicast GLOBAL_ABORT to all participants; 
  22.     } 
  23.  
  24. 參與者: 
  25.  
  26.     write INIT to local log; //寫日志 
  27.     wait for VOTE_REQUEST from coordinator; 
  28.     if timeout { //等待超時(shí) 
  29.         write VOTE_ABORT to local log; 
  30.         exit; 
  31.     } 
  32.     if participant votes COMMIT { 
  33.         write VOTE_COMMIT to local log; //記錄自己的決策 
  34.         send VOTE_COMMIT to coordinator; wait for DECISION from coordinator; 
  35.         if timeout { 
  36.             multicast DECISION_REQUEST to other participants; //超時(shí)通知 
  37.             wait until DECISION is received;  /* remain blocked*/ 
  38.             write DECISION to local log; 
  39.         } 
  40.         if DECISION == GLOBAL_COMMIT 
  41.             write GLOBAL_COMMIT to local log; 
  42.         else if DECISION == GLOBAL_ABORT 
  43.             write GLOBAL_ABORT to local log; 
  44.     } else { 
  45.         write VOTE_ABORT to local log; 
  46.         send VOTE_ABORT to coordinator; 
  47.     } 
  48. 每個(gè)參與者維護(hù)一個(gè)線程處理其它參與者的DECISION_REQUEST請求: 
  49.  
  50.     while true { 
  51.         wait until any incoming DECISION_REQUEST is received; 
  52.         read most recently recorded STATE from the local log; 
  53.         if STATE == GLOBAL_COMMIT 
  54.             send GLOBAL_COMMIT to requesting participant; 
  55.         else if STATE == INIT or STATE == GLOBAL_ABORT; 
  56.             send GLOBAL_ABORT to requesting participant; 
  57.         else 
  58.             skip;  /* participant remains blocked */ 
  59.     } 
  • 3PC三階段提交:準(zhǔn)備階段、預(yù)提交階段、提交階段

3PC其實(shí)就是2PC的升級版,相比于2PC,參與者也引入了超時(shí)機(jī)制,并且還新增了一個(gè)階段使得參與者可以利用這一階段來統(tǒng)一各自的狀態(tài)

3PC分為三個(gè)階段:準(zhǔn)備階段、預(yù)提交階段、提交階段。看起來更像是把2PC中的提交階段分為了預(yù)提交和提交的兩個(gè)階段, 但是這里的準(zhǔn)備階段其實(shí)就是詢問參與者的自身狀況,就是問你現(xiàn)在的狀況如何,負(fù)載是不是超載,還可以再接受新的任務(wù)嗎

而預(yù)提交階段其實(shí)就是類似于2PC的準(zhǔn)備階段,就是除了事務(wù)的提交該做的都做了,就是之前的準(zhǔn)備工作,但是在3PC中叫做預(yù)提交階段 


3PC是首先準(zhǔn)備階段并不會直接執(zhí)行事務(wù),而是先去詢問此時(shí)的參與者是否有條件可以執(zhí)行這個(gè)事務(wù),因此不會直接鎖住資源,而預(yù)提交階段的引入則是為了起到了一個(gè)統(tǒng)狀態(tài)的作用,在預(yù)處理階段表面所有參與者都已經(jīng)回應(yīng)了

其實(shí)這也多引入了一個(gè)階段,因此性能會差一些,而且絕大部分的情況下資源也都是沒問題的,也就是可用的,這樣等于每次明知可用但是還是得詢問一次

當(dāng)然,這其中哪一個(gè)階段的參與者返回失敗都會宣布事務(wù)失敗,這個(gè)2PC也是一樣的,當(dāng)然到最后的提交階段和2PC一樣都是只要是提交請求也就只能通過不斷的重試咯

我們上面說過2PC是同步阻塞的,協(xié)調(diào)者掛在了提交請求還未發(fā)出去的時(shí)候是最尷尬的,所有參與者都已經(jīng)鎖定了資源并且阻塞的等待著,于是引入了超時(shí)機(jī)制,參與者則不用直接干干的等著了,如果是等待提交命令超時(shí),那么參與者就會提交事務(wù)了,因?yàn)榈搅诉@一階段大概率都是提交的,如果是等待預(yù)提交超時(shí),接下來也沒啥影響

這里其實(shí)有一個(gè)問題,然后超時(shí)機(jī)制會帶來數(shù)據(jù)不一致的問題,就是在等待提交命令的時(shí)候超時(shí),那么參與者自動(dòng)提交事務(wù)了,但是呢,也可能執(zhí)行的是回滾機(jī)制,這樣一來數(shù)據(jù)便出現(xiàn)了不一致了

3PC的引入是為了解決提交階段2PC協(xié)調(diào)者和其中的部分參與者都掛了的情況下,然后之后的新選舉的協(xié)調(diào)者不知道當(dāng)前應(yīng)該是該提交還是回滾的問題,新協(xié)調(diào)者來的時(shí)候發(fā)現(xiàn)有一個(gè)參與者處于預(yù)提交或者提交階段,那么表明所以參與者都已經(jīng)經(jīng)過確認(rèn)了,所以此時(shí)執(zhí)行的就是提交命令了

3PC就是通過引入預(yù)提交階段來是的參與者之間的狀態(tài)得到真正的統(tǒng)一,也就是留了一個(gè)階段讓大家都同步,但是這也是只能讓協(xié)調(diào)者知道如何做,并不能保證這樣做一定是對的,這其實(shí)和上面的2PC的分析一直,因?yàn)閽炝说膮⑴c者到底有沒有執(zhí)行事務(wù)是無法斷定的,所以說呢,3PC通過預(yù)提交階段可以減少故障時(shí)候的復(fù)雜性,但是并不能保證數(shù)據(jù)真正的一致,處理掛了的那個(gè)參與者也恢復(fù)了

一句話總結(jié):3PC相比于2PC做了一定的參與者超時(shí)機(jī)制的改進(jìn),并且增加了預(yù)提交階段,可以使故障恢復(fù)之后的協(xié)調(diào)者的決策復(fù)雜度降低,但整體的交互過程會變得更長,性能會有所下降,而且還會出現(xiàn)數(shù)據(jù)不一致的情況

  • TCC:Try-Confirm-Cancel

TCC屬于業(yè)務(wù)層面的分布式事務(wù),分布式事務(wù)不僅僅包含數(shù)據(jù)庫層面的操作,還包括業(yè)務(wù)層面的操作,這時(shí)候TCC就要排上用場了

TCC指的就是Try、Confirm、Cancel三個(gè)步驟,Try指的是預(yù)留,指的是資源的預(yù)留和鎖定;Confirm指的就是確認(rèn)操作,這一步其實(shí)就是屬于真正的執(zhí)行了,真正的消耗資源來進(jìn)行相應(yīng)的業(yè)務(wù)提交操作;Cancel指的是撤銷操作,可以理解為把預(yù)留階段的動(dòng)作銷毀了,就是一個(gè)回滾操作

從思想上來看,其實(shí)是和2PC、3PC是類似的,都是先試探性的執(zhí)行,先試探性的鎖定資源,如果每一個(gè)參與者都沒問題了,就可以執(zhí)行真正的操作了,提交或者回滾 

舉個(gè)例子:一個(gè)事務(wù)要執(zhí)行A、B、C三個(gè)操作,那么先對三個(gè)操作執(zhí)行預(yù)留動(dòng)作,如果所有都預(yù)留成功了那么就執(zhí)行確認(rèn)提交操作,如果其中至少有一個(gè)預(yù)留失敗,那就都執(zhí)行撤銷的動(dòng)作

TCC模型其中還有一個(gè)事務(wù)管理者的角色,用來記錄TCC有關(guān)的全局事務(wù)操作的狀態(tài),并且準(zhǔn)備提交或者回滾事務(wù),其實(shí)這個(gè)是比較容易理解的,難點(diǎn)在于業(yè)務(wù)上的定義

怎么說呢,TCC這種是對業(yè)務(wù)的侵入較大和業(yè)務(wù)緊耦合,需要根據(jù)相應(yīng)的特定的業(yè)務(wù)場景和業(yè)務(wù)邏輯來設(shè)定的響應(yīng)操作,其實(shí)還有一點(diǎn)需要注意的是,撤銷和確認(rèn)的操作的執(zhí)行的就是需要重試,就是需要保證操作的冪等性

TCC相對來說,適用的范圍應(yīng)該是更廣的,但是這個(gè)是有一個(gè)缺點(diǎn)的,就是這個(gè)和業(yè)務(wù)是耦合的,需要大量的開發(fā),因?yàn)槎际窃跇I(yè)務(wù)上的實(shí)現(xiàn),等同于每個(gè)場景都需要三個(gè)方法來實(shí)現(xiàn),就是嵌入業(yè)務(wù),所以TCC是可以跨業(yè)務(wù)系統(tǒng)、跨數(shù)據(jù)庫來實(shí)現(xiàn)事務(wù)

  • 本地消息表

本地消息表,就是利用了各個(gè)系統(tǒng)的本地事務(wù)來實(shí)現(xiàn)分布式事務(wù),這個(gè)呢,其實(shí)很簡單的道理,其實(shí)就是會有一張存放本地消息的表,一般都是放在數(shù)據(jù)庫中,然后在執(zhí)行業(yè)務(wù)的時(shí)候,必須把業(yè)務(wù)的真正的執(zhí)行操作和相應(yīng)的這個(gè)操作的消息放入到消息表中這個(gè)操作,存放到同一個(gè)事務(wù)中,就是只要操作成功了,就必須保證該消息也成功的放入到本地的消息表中了

接下來調(diào)用下一個(gè)操作的時(shí)候,如果下一個(gè)操作調(diào)用成功了,就可以直接把消息的狀態(tài)改成已成功,調(diào)用失敗也沒有關(guān)系,我們可以寫一個(gè)定時(shí)任務(wù)來讀取本地的消息表,然后篩選出未執(zhí)行成功的消息再調(diào)用對應(yīng)的服務(wù),服務(wù)更新成功了,再改變消息的狀態(tài)

其實(shí)這里也是需要重試機(jī)制,重試就得保證對應(yīng)服務(wù)的方法是冪等的,而且一般重試也會有最大的次數(shù),超過最大次數(shù)的時(shí)候可以人工介入

本地消息表實(shí)現(xiàn)的是業(yè)務(wù)的最終一致性,需要能夠容忍數(shù)據(jù)暫時(shí)不一致的情況

  • 消息事務(wù)

其實(shí)消息事務(wù),最典型的就是屬于RocketMQ中的實(shí)現(xiàn)了,而且應(yīng)用的場景也是比較多的

RocketMQ的機(jī)制就是先給Broker發(fā)送事務(wù)消息,也就是半消息,半消息指的是這個(gè)消息對消費(fèi)者來說不可見,然后發(fā)送成功后,發(fā)送之后會繼續(xù)執(zhí)行本地事務(wù)

第二步就是根據(jù)本地事務(wù)的執(zhí)行結(jié)果向Broker發(fā)送Commit和Rollback命令,如果一直不發(fā)送,RocketMQ的發(fā)送方會提供一個(gè)反查事務(wù)狀態(tài)的接口,用來反查相應(yīng)的事務(wù)的結(jié)果到底是成功還是回滾

其實(shí)這也就是個(gè)超時(shí)機(jī)制,在一段時(shí)間內(nèi)沒有收到任何的操作請求,那么Broker就會通過相應(yīng)的結(jié)果查出該事務(wù)是否成功執(zhí)行呢,是Commit還是Rollback

如果是Commit,則broker就會發(fā)送這個(gè)消息到訂閱方,然后再做對應(yīng)的操作,做完了之后就可以消費(fèi)這個(gè)消息,如果是Rollback則訂閱方即收不到這個(gè)消息,等同于事務(wù)沒有執(zhí)行過

  • 最大努力通知

其實(shí)最大努力通知我個(gè)人認(rèn)為是一種思想,像上面的本地消息表、事務(wù)消息也是屬于最大努力通知類型的

本地消息表會有后臺任務(wù)定時(shí)查看未完成的任務(wù)的消息,然后去調(diào)用對應(yīng)的服務(wù),進(jìn)行多次重試,當(dāng)多次失敗的時(shí)候就需要引入人工,這也是屬于最大努力

事務(wù)消息也是屬于類似,半消息被Commit之后就會發(fā)送到消費(fèi)端了,如果消費(fèi)端一直不消費(fèi)或者消費(fèi)不了則會一直重試,如果重試次數(shù)達(dá)到一定數(shù)量,該消息變回進(jìn)入到私信隊(duì)列,也是屬于盡最大努力通知吧

這應(yīng)該是屬于一種思想,盡最大努力的達(dá)到事務(wù)的最終一致,適用于對時(shí)間不敏感的業(yè)務(wù)場景

 

責(zé)任編輯:姜華 來源: 大魚仙人
相關(guān)推薦

2022-11-25 17:29:27

分布式事務(wù)

2024-06-26 11:55:44

2024-09-24 16:30:46

分布式鎖Redis數(shù)據(jù)中間件

2022-08-11 18:27:50

面試Redis分布式鎖

2025-07-22 01:33:00

分布式Zookeeper

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫

2023-01-26 02:16:17

2024-02-22 17:02:09

IDUUID雪花算法

2020-09-27 06:52:22

分布式存儲服務(wù)器

2025-07-17 00:05:00

MCPAI 技術(shù)Nacos 3.0

2025-03-05 00:01:00

ReduxReact

2024-08-07 08:15:47

2022-06-27 08:21:05

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

2024-03-01 09:53:34

2020-04-16 08:22:11

HTTPS加解密協(xié)議

2021-05-20 08:54:16

Go面向對象

2010-08-23 15:06:52

發(fā)問

2022-05-24 08:03:28

InnoDBMySQL數(shù)據(jù)

2022-06-21 08:27:22

Seata分布式事務(wù)

2017-07-26 15:08:05

大數(shù)據(jù)分布式事務(wù)
點(diǎn)贊
收藏

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

色妞在线综合亚洲欧美| 99久久99久久精品国产片果冻| 欧美年轻男男videosbes| 国产在线精品一区二区三区| 久久中文字幕精品| 久久青草伊人| 国产iv一区二区三区| 日韩专区在线观看| 成人在线激情网| 日本高清视频网站| 欧美1区2区| 欧美浪妇xxxx高跟鞋交| 日韩av一级大片| 亚洲日本韩国在线| 凹凸av导航大全精品| 成人欧美一区二区三区在线播放| 日韩av电影在线网| 亚洲熟女一区二区| 欧美v亚洲v| 极品少妇xxxx精品少妇| 深夜福利日韩在线看| 黑森林福利视频导航| 日韩一区免费视频| 欧美日韩一区自拍| 欧美一级淫片007| 亚洲国产精品影视| 亚洲视频在线观看免费视频| 国产成人三级| 色八戒一区二区三区| 欧美激情论坛| 日韩一级片中文字幕| 美日韩中文字幕| 一本一道综合狠狠老| 久久精品日产第一区二区三区乱码| 国产精品111| 超碰成人在线免费| 亚瑟在线精品视频| 好看的日韩精品| 91美女免费看| 亚洲精品中文字幕99999| 色呦呦一区二区三区| 欧美日韩国产免费一区二区三区| 特级做a爱片免费69| 综合亚洲自拍| 欧美吞精做爰啪啪高潮| 亚洲自拍偷拍二区| 国产乱码久久久| 国语对白精品一区二区| 亚洲成av人片在线观看香蕉| 霍思燕三级露全乳照| 无码国精品一区二区免费蜜桃| 99av国产精品欲麻豆| 亚洲男人的天堂在线播放| 亚洲熟妇av一区二区三区| 懂色av中文在线| 麻豆精品精品国产自在97香蕉| 久久精品国产亚洲| 色诱av手机版| 欧美色999| 综合分类小说区另类春色亚洲小说欧美| 亚洲字幕在线观看| 国产香蕉视频在线| 成人免费在线观看av| 欧美一级黄色片| 久久精品.com| 日本三级在线播放完整版| 国产精品一区在线观看乱码 | 国产精品91免费在线| 99国产精品无码| 久9re热视频这里只有精品| 91久久精品日日躁夜夜躁欧美| 在线国产伦理一区| 无码精品视频一区二区三区 | 国产九九在线观看| 黄色小说在线播放| 国产喷白浆一区二区三区| 亚洲tv在线观看| 日韩精品久久久久久免费| 99久久婷婷| 日韩精品极品视频| 奇米777在线| 电影一区二区| 亚洲www啪成人一区二区麻豆| 日韩国产精品一区二区| 亚洲国产精品久久久久久6q| 久久天天综合| 午夜精品久久久久久久白皮肤 | 国产91久久精品一区二区| 欧美一区二区三区视频在线观看| 99久久久无码国产精品6| 四虎影院观看视频在线观看| 国产拍欧美日韩视频二区| 国产a一区二区| 亚洲性在线观看| 亚洲免费网站| 午夜精品福利在线观看| 成年人午夜剧场| 精品国产一区二区三区久久久蜜臀| 日韩欧美在线字幕| 人妻av中文系列| av文字幕在线观看| 国产蜜臀97一区二区三区 | 久久久久国产一区| 久久青青视频| 精品福利免费观看| 日韩精品视频在线观看视频| 成人直播在线| 亚洲视频一区在线| 一区二区三区视频在线播放| 久久国产精品高清一区二区三区| 成人av在线影院| 97免费资源站| av av片在线看| 久久99国产精品免费网站| 国产精品h片在线播放| 亚洲天堂av片| 亚洲少妇自拍| 97超级碰碰人国产在线观看| 国产在线观看免费视频今夜| 欧美精品日韩| 精品综合久久久久久97| 国产高潮流白浆| 久久精品青草| 久久国产精彩视频| 久久午夜无码鲁丝片午夜精品| 午夜精品av| 欧美激情一区二区三级高清视频 | 91porn在线| 中文一区二区三区四区| 日韩一卡二卡三卡| 精人妻一区二区三区| 136福利精品导航| 亚洲激情小视频| 97伦伦午夜电影理伦片| 亚洲自拍都市欧美小说| 亚洲一区二区久久久| 久久精品色妇熟妇丰满人妻| 亚洲电影在线一区二区三区| 久久69精品久久久久久久电影好 | 91在线直播| 国产精品国产自产拍高清av | 亚洲aⅴ男人的天堂在线观看| 97人妻一区二区精品免费视频| 国产毛片精品国产一区二区三区| 国产成人成网站在线播放青青 | 日韩国产大片| 日韩精品在线网站| 朝桐光av一区二区三区| 久操国产精品| 久久午夜a级毛片| 国产91av视频| 日韩精品1区2区3区| 国产欧美日韩视频| 亚洲国产精品一| 91免费版在线| 中文字幕一区二区三区有限公司 | 亚洲精品欧美激情| 日日鲁鲁鲁夜夜爽爽狠狠视频97 | 蜜桃精品成人影片| 色琪琪久久se色| 国内精品久久影院| 人人草在线观看| 国产在线精品一区二区不卡了| 国产高清自拍99| 激情在线视频| 亚洲一区二区在线免费观看视频| 国产精品动漫网站| 日韩精品中文字幕吗一区二区| 日韩成人中文电影| 香蕉成人在线视频| 99精品免费视频| 国产综合色香蕉精品| 少妇一区二区三区四区| 国产精品国产三级国产a| 两根大肉大捧一进一出好爽视频| 日日夜夜综合| 亚洲人午夜色婷婷| 久久老司机精品视频| 免费高清不卡av| 另类小说综合网| 亚洲综合影视| 精品视频一区二区三区免费| 中文字幕乱码一区| 亚洲成人二区| 国产精品亚洲片夜色在线| 婷婷五月综合久久中文字幕| 亚洲天堂2014| 91高清国产视频| 欧州一区二区| 欧美有码在线观看视频| 午夜精品久久久久久久99热黄桃 | 久久精品国产成人一区二区三区| 久久国产精品免费一区| 亚洲夜夜综合| 91精品国产美女浴室洗澡无遮挡| 中文字幕在线观看免费高清| 亚洲精品黄色| 国产日韩欧美一区二区三区四区| 国产日产一区二区三区| 欧美在线视频全部完| 国产精品jizz| 亚洲毛片播放| 国产欧美丝袜| 国产蜜臀一区二区打屁股调教| 6080亚洲精品一区二区| 人妻无码一区二区三区免费| 老妇喷水一区二区三区| 欧美福利一区二区三区| 国产夫妻在线| 亚洲国产精品人人爽夜夜爽| 国产精彩视频在线观看| 国产成人午夜片在线观看高清观看| 国产树林野战在线播放| av成人在线网站| 爱福利视频一区| 国产免费黄色片| 亚洲视频香蕉人妖| www.日本久久| 亚洲欧美综合| 高清日韩一区| 蜜桃av.网站在线观看| 亚洲精品电影久久久| 午夜影院在线看| 91小视频免费看| 不卡影院一区二区| 欧美日韩黑人| 成人性生交xxxxx网站| 成码无人av片在线观看网站| 欧美一区二区三区免费大片 | 偷拍一区二区三区四区| 国产又粗又猛又色| 午夜亚洲性色福利视频| 欧美中日韩免费视频| 69堂免费精品视频在线播放| 综合久久五月天| 国产乱码一区二区| 亚洲国产欧美另类丝袜| 中出视频在线观看| 蜜臀久久久99精品久久久久久| 少妇熟女一区二区| 丁香综合av| 国产98色在线| 黄色网页网址在线免费| 日韩精品一区二区在线| 天天操天天摸天天干| 国产精品女人毛片| 精人妻一区二区三区| 久久大逼视频| 黄色一级视频播放| 美女av一区| 91精品国产综合久久久久久久久 | 精品一区在线| 亚洲free性xxxx护士hd| 91美女精品| 中文字幕国产精品| 亚洲狼人综合网| 色综合久久88色综合天天免费| 女性裸体视频网站| www.日韩大片| 亚洲午夜激情影院| 亚洲激情综合| 曰韩不卡视频| 台湾亚洲精品一区二区tv| 成人黄色av播放免费| 日韩欧美一中文字暮专区| 日韩网站免费观看| 婷婷色在线观看| 欧美一级一区二区| 99re国产在线| 亚洲成a人v欧美综合天堂下载| 最新中文字幕av| 波多野结衣中文字幕一区| 91视频免费版污| 99精品久久| 日本成人在线不卡| 成人免费a**址| 鲁片一区二区三区| 亚洲国产一区二区三区网站| 国产精品成人在线| av资源中文在线天堂| 久久精品国产清自在天天线| 国产在线一二三区| 亚洲国产成人久久综合| 99久久精品日本一区二区免费| 日本国产一区二区| 精品亚洲永久免费| 综合久久综合久久| 99精品全国免费观看| 91小视频在线| 亚洲色偷偷色噜噜狠狠99网 | 在线xxxxx| 国模一区二区三区白浆| 性欧美极品xxxx欧美一区二区| 99国产精品久久久久久久| 最新av网址在线观看| 色一区二区三区四区| 欧美一区二区视频17c| 国产女人18毛片水真多18精品| 91视频国产高清| 丁香久久综合| 国产精品美女视频网站| a日韩av网址| 55夜色66夜色国产精品视频| heyzo一区| 久久免费视频网站| 国产探花在线观看| 久久久久久国产精品| 免费不卡av| 国内精品美女av在线播放| 成年网站在线视频网站| 色综合男人天堂| 日韩另类在线| 久久久久久成人| 7777kkk亚洲综合欧美网站| 欧美精品在线观看| 中文字幕伦理免费在线视频 | 国产福利一区在线观看| 天堂av在线8| 国产美女精品人人做人人爽| 亚洲av无日韩毛片久久| 韩国av一区二区三区在线观看| 久久久久久久久久久久久久久国产| 久久精品国产一区二区| 国产传媒免费观看| 国产激情91久久精品导航| 免费观看黄网站| 成人精品视频.| 黄色a一级视频| 国产午夜久久久久| 国产中文字幕久久| 夜夜亚洲天天久久| 日本少妇裸体做爰| 色先锋aa成人| 一卡二卡在线观看| 日韩美女在线视频| 亚洲av成人无码网天堂| 一本色道久久综合亚洲精品小说| 免费黄色在线看| 欧美激情网友自拍| 亚洲精品中文字幕| 国产精品视频一| 秋霞一区二区三区| 另类视频在线观看+1080p| 欧美偷拍综合| 污污污污污污www网站免费| 日韩午夜av在线| 中文字幕第88页| 国产成a人无v码亚洲福利| 免费成人深夜夜行p站| 国产欧美日韩在线| 久久免费公开视频| 91九色最新地址| aa视频在线免费观看| 亚洲精品综合精品自拍| 男人天堂久久久| 97在线观看视频国产| 狂野欧美性猛交xxxx| 91精品久久久久| 日韩精品导航| 一区二区三区四区免费视频| 99人久久精品视频最新地址| 成人性生生活性生交12| 成人免费毛片app| 国产又黄又粗的视频| 亚洲影院理伦片| 日本成人一级片| 日韩av网站电影| 黄色大片在线播放| 国产成人午夜视频网址| 在线日韩成人| 国产对白在线播放| 肉丝袜脚交视频一区二区| 极品人妻一区二区| 国产欧美日本一区二区三区| 欧美精品久久久久性色| 色婷婷一区二区三区四区| 性中国古装videossex| 国产午夜精品美女视频明星a级| 久久五月精品中文字幕| 国产精品一区专区欧美日韩| 偷拍亚洲色图| 日韩精品一区二区在线视频| 蜜桃一区二区三区四区| 性欧美13一14内谢| 亚洲国产精品一区二区www在线 | 国产免费拔擦拔擦8x高清在线人| 国产日韩欧美在线看| 亚洲涩涩av| 亚洲 高清 成人 动漫| 国产成人av资源| 91麻豆免费视频网站| 在线亚洲高清视频| 日本韩国一区| 97在线精品国自产拍中文| 成人资源在线播放| 女女同性女同一区二区三区按摩| 青青草国产成人99久久| 波多野结衣片子| 欧美色欧美亚洲高清在线视频| 人妻91麻豆一区二区三区|