關(guān)于利用MQ實現(xiàn)分布式事務(wù)的想法

假設(shè):消息服務(wù)不丟消息

場景 服務(wù)A 服務(wù)B 服務(wù)C 消息服務(wù)Q

偽代碼

服務(wù)A中
transaction{
A本地事務(wù)
B.callB();
C.callC();
A本地事務(wù)
}

利用消息服務(wù)來實現(xiàn)分布式事務(wù)
原理 當(dāng)服務(wù)A執(zhí)行事務(wù)時,所有指定遠(yuǎn)程調(diào)用會被轉(zhuǎn)換為發(fā)送一條調(diào)用消息到消息服務(wù),當(dāng)B和C接收到消息時,立即執(zhí)行消息指定的方法偏瓤,并在提交前發(fā)送回復(fù)消息給A(攜帶有返回值)并且等待接收提交或者回滾消息,服務(wù)A執(zhí)行完方法也在提交前等待B和C的回復(fù)布朦,當(dāng)B和C的回復(fù)都為sucess時發(fā)送提交消息給B和C,然后自己提交肆饶,否則回滾骆捧。B和C接到提交消息后,提交顿膨,否則回滾锅锨。

異常情況一:在發(fā)送調(diào)用B的消息時失敗
服務(wù)A事務(wù)直接回滾

異常情況二:在發(fā)送調(diào)用C的消息時失敗
服務(wù)A事務(wù)直接回滾,并發(fā)送回滾消息到指定隊列(此兩步操作由Q的事務(wù)消息保證原子性)

異常情況三:服務(wù)A提交和回滾失敗
由于服務(wù)A提交和回滾操作和發(fā)送提交或者回滾消息在一個事務(wù)內(nèi)恋沃,所以放在一起討論必搞,
由于此部分由消息中間件保證原子性,固提交或者回滾失敗芽唇,不會有提交或者回滾消息到達(dá)消息中間件,B和C等待一段時間后自動回滾

異常情況四:B在發(fā)送回復(fù)消息時失敗
A在等待指定時間后沒有收到B的回復(fù),進(jìn)行回滾操作并發(fā)送回滾消息到指定隊列匆笤,C在收到回滾消息后回滾研侣,B在等待指定時間后沒有收到A的提交消息回滾

異常情況五:C在發(fā)送回復(fù)消息時失敗
同異常情況四

異常情況六:B提交失敗或者C提交失敗
B或C中調(diào)用消息和提交消息均不消費,會進(jìn)行重試

異常情況七:B或者C回滾失敗
同異常情況六

異常情況八:B或者C邏輯出現(xiàn)異常導(dǎo)致失敗
B或者C直接回滾炮捧,并且發(fā)送失敗回復(fù)

停機啟動恢復(fù)處理

由于異常導(dǎo)致的死機庶诡,然后重啟后的邏輯

一、只接收到調(diào)用消息咆课,執(zhí)行末誓,然后等待固定時間后回滾。
二书蚪、按照順序接收到調(diào)用消息和提交消息喇澡,執(zhí)行然后提交
三、先接收到提交消息后接收到調(diào)用消息殊校,一樣晴玖,執(zhí)行然后提交
四、接收到調(diào)用和回滾消息为流,同上

從上可以推導(dǎo)出呕屎,利用消息系統(tǒng)做分布式事務(wù)的兩個特性
強調(diào)一下假設(shè):消息服務(wù)不丟消息
一、在網(wǎng)絡(luò)暢通所有服務(wù)高可用的情況下敬察,可以做到數(shù)據(jù)的強一致性
二秀睛、在網(wǎng)絡(luò)和服務(wù)可能存在故障的情況下,可以做到數(shù)據(jù)的最終一致性

關(guān)于數(shù)據(jù)在最終一致性情況下的查詢問題
1.最好的解決方案是不管莲祸,更新后查詢數(shù)據(jù)查到舊的數(shù)據(jù)就讓它查到舊的數(shù)據(jù)
2.可以利用緩存蹂安,自己寫邏輯實現(xiàn),還未提交的數(shù)據(jù)緩存下來虫给,查詢時先查詢緩存

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末藤抡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子抹估,更是在濱河造成了極大的恐慌缠黍,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件药蜻,死亡現(xiàn)場離奇詭異瓷式,居然都是意外死亡,警方通過查閱死者的電腦和手機语泽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門贸典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人踱卵,你說我怎么就攤上這事廊驼【莨” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵妒挎,是天一觀的道長绳锅。 經(jīng)常有香客問我,道長酝掩,這世上最難降的妖魔是什么鳞芙? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮期虾,結(jié)果婚禮上原朝,老公的妹妹穿的比我還像新娘。我一直安慰自己镶苞,他們只是感情好喳坠,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宾尚,像睡著了一般丙笋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上煌贴,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天御板,我揣著相機與錄音,去河邊找鬼牛郑。 笑死怠肋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的淹朋。 我是一名探鬼主播笙各,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼础芍!你這毒婦竟也來了杈抢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仑性,失蹤者是張志新(化名)和其女友劉穎惶楼,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诊杆,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡歼捐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了晨汹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豹储。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淘这,靈堂內(nèi)的尸體忽然破棺而出剥扣,到底是詐尸還是另有隱情巩剖,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布钠怯,位于F島的核電站球及,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏呻疹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一筹陵、第九天 我趴在偏房一處隱蔽的房頂上張望刽锤。 院中可真熱鬧,春花似錦朦佩、人聲如沸并思。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽宋彼。三九已至,卻和暖如春仙畦,著一層夾襖步出監(jiān)牢的瞬間输涕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工慨畸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留莱坎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓寸士,卻偏偏與公主長得像檐什,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弱卡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)載個人原創(chuàng)微信版 文章摘要:原來大型分布式/微服務(wù)系統(tǒng)中解決數(shù)據(jù)一致性問題乃正,居然是通過…… 目前云計算、大數(shù)據(jù)婶博、...
    癲狂俠閱讀 1,252評論 0 6
  • 當(dāng)我們在生產(chǎn)線上用一臺服務(wù)器來提供數(shù)據(jù)服務(wù)的時候瓮具,我會遇到如下的兩個問題: 1)一臺服務(wù)器的性能不足以提供足夠的能...
    isgiker閱讀 622評論 0 5
  • 轉(zhuǎn)載自己該篇文章的微信版本鏈接 文章摘要:原來大型分布式/微服務(wù)系統(tǒng)中解決數(shù)據(jù)一致性問題搭综,居然是通過…… 一、為什...
    癲狂俠閱讀 2,723評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理划栓,服務(wù)發(fā)現(xiàn)兑巾,斷路器,智...
    卡卡羅2017閱讀 134,693評論 18 139
  • 閱讀時間:40分鐘 問題:能記住一些忠荞,但是感覺比較散蒋歌,表達(dá)出來時不太好 讀了第五帅掘、六章,朝著目標(biāo)堂油,養(yǎng)成堅持的習(xí)慣修档,...
    葉宸西閱讀 366評論 1 0