成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

談談你對RocketMQ分布式事務原理的理解

開發 架構
隨著應用的拆分,從單體架構變成分布式架構,那么每個服務或者模塊也會有自己的數據庫。一個業務流程的完成需要經過多次的接口調用或者多條MQ消息的發送。

?有位工作五年的小伙伴在面試的時候被問到RocketMQ的分布式事務實現原理。他說他只知道RocketMQ能夠支持事務,但是沒有了解過它的事務實現原理。

今天,我給大家分享一下我對這個問題的理解。

1.分布式事務應用場景

隨著應用的拆分,從單體架構變成分布式架構,那么每個服務或者模塊也會有自己的數據庫。一個業務流程的完成需要經過多次的接口調用或者多條MQ消息的發送。

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

那么問題來了,如果是執行多條SQL語句,數據庫的本地事務可以保證原子性。

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

但,如果是一條SQL操作,再加一條MQ的操作,如何才能把它們兩個放在同一個邏輯單元里面執行呢?是先執行SQL還是先發送MQ呢?

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

我們來分析一下情況,如果是先發送MQ消息,再執行SQL。這個時候就要分為兩種情況:

第1種情況:如果發送MQ失敗了,當然SQL也就不會執行了。

第2種情況:如果發送MQ成功了,而本地數據庫SQL執行失敗。比如出現了網絡異常,主鍵重復或者字段超長等等。

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

也就是說,下游的業務系統拿到了最新的數據,而自己本地的數據庫反而沒有。這個時候,本地數據庫的數據跟其他系統已經登記的數據就不一樣了,而發出去的消息又不可能撤回,有可能已經被消費了,這個叫做覆水難收。

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

因此,在分布式應用場景中,我們需要調整一下代碼執行流程,也就是說必須先操作本地數據庫,再發送MQ消息。如果本地數據庫SQL執行成功,就算MQ消息發送失敗,MQ還可以重發。

2.分布式事務實現原理

那基于上面的應用場景,應該如何設計發送消息的流程,才能讓這兩個操作要么都成功,要么都失敗呢?

其實,可以參照XA兩階段提交的思想,把發送消息分成兩步,然后把操作本地數據庫也包括在這個流程中。那么,在介紹原理之前,先科普一下兩個新的概念:

1、半消息(Half Message):也就是暫不能投遞消費者的消息。發送方已經將消息成功發送到了 MQ 服務端,但是服務端未收到生產者對這條消息的二次確認,這個時候,這條消息會被標記為“暫不能投遞”狀態。

2、消息回查(Message Status Check):由于網絡閃斷、生產者應用重啟等原因,導致某條事務消息的二次確認丟失,MQ 服務端通過掃描發現某條消息長期處于“半消息”時,需要主動向消息生產者詢問該消息的最終狀態,要么是Commit,要么Rollback。

下面給大家介紹一下RocketMQ的分布式事務實現原理,如圖所示,一共分為七個步驟:

圖片

浪漫和悲觀并不沖突,我時常消極但又依舊覺得生活很美好,哪怕只是一束光照進了房間,也要認真對待它的到來。

第一步:生產者向 MQ 服務端發送消息。

第二步:MQ 服務端將消息持久化成功之后,向發送方 ACK 確認消息已經發送成功,此時消息為半消息。

第三步:發送方開始執行本地數據庫事務邏輯。

第四步:發送方根據本地數據庫事務執行結果向 MQ Server 提交二次確認,MQ Server 收到 Commit 狀態則將半消息標記為可投遞,訂閱方最終將收到該消息;MQ Server 收到 Rollback 狀態則刪除半消息,訂閱方將不會接受該消息。

第五步:在斷網或者是應用重啟的特殊情況下,按步驟4提交的二次確認最終未到達 MQ Server,經過固定時間后 MQ Server 將對該消息發起消息回查。

第六步:發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。

第七步:發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,MQ Server 仍按照步驟4對半消息進行操作(Commit/Rollback)。

好了,以上就是我對RocketMQ分布式事務的理解。

責任編輯:武曉燕 來源: Tom彈架構
相關推薦

2024-01-26 13:17:00

rollbackMQ訂單系統

2022-06-21 08:27:22

Seata分布式事務

2024-09-02 16:10:19

vue2前端

2022-08-14 07:14:50

Kafka零拷貝

2022-06-10 11:51:49

MySQL事務隔離

2023-11-28 12:25:02

多線程安全

2022-06-30 09:10:33

NoSQLHBaseRedis

2022-09-06 11:13:16

接口PipelineHandler

2022-09-23 11:00:27

KafkaZookeeper機制

2019-11-19 08:47:45

Zookeeper分布式事務

2025-04-11 09:57:16

2022-01-26 13:46:40

分布式事務集合,這

2022-07-10 20:24:48

Seata分布式事務

2022-06-27 08:21:05

Seata分布式事務微服務

2023-09-14 15:44:46

分布式事務數據存儲

2025-01-15 08:34:00

分布式事務服務

2017-07-26 15:08:05

大數據分布式事務

2022-08-28 09:05:34

分布式存儲Ceph

2022-09-19 07:57:59

云服務互聯網基礎設施

2022-08-29 16:03:33

狀態流轉Java
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 特级丰满少妇一级aaaa爱毛片 | 日韩欧美亚洲 | 日韩精品国产精品 | 久久免费高清视频 | 99久久99久久精品国产片果冰 | 国产精品美女久久久久aⅴ国产馆 | 国产精品久久久久久久午夜片 | 亚洲一区免费在线 | 国产精品一区二区三区久久 | 久久99精品久久久久久国产越南 | 国产在线一区二区 | 免费三级av | 久久久噜噜噜久久中文字幕色伊伊 | 黄视频网站免费观看 | 91久久精品一区二区二区 | 精品亚洲一区二区三区 | 国产大毛片| 亚洲色图50p | 国产精品久久久久久中文字 | 国产一区二区自拍 | 天天影视色综合 | 99av成人精品国语自产拍 | 久久小视频 | 精品视频一区二区三区 | 欧美日韩久久 | 在线视频国产一区 | www.99热 | 夜夜精品浪潮av一区二区三区 | 亚洲成人精品在线观看 | 亚洲成人精品一区 | 噜噜噜噜狠狠狠7777视频 | 久久综合一区 | 欧美精品一区二区在线观看 | 精品国产一区二区三区性色av | 欧美精品一二三 | 国产精品91网站 | 欧美激情五月 | 午夜丰满少妇一级毛片 | 久久久.com | 天堂久久一区 | 亚洲精品一区二区 |