分佈式事務之阿里Seata方案(附源碼)

前言:

     對比了很多分佈式事務的框架(LCN,TCC-transaction,等等)決定還是採用seata來寫篇文章,採用的是SpringCloud微服務編碼

    分佈式事務產生的歷史和背景這邊就不多敘述了,不太瞭解的朋友可以看我之前的文章,理論寫的比較多(2PC,TCC,本地消息事務都有)。今天主要是帶大家用阿里開源框架去解決微服務中的核心問題,分佈式事務,以前同事公司也是用的這套框架,也因爲是阿里的產品,所以比較放心。

 

seata介紹:

    簡易可擴展的自治式分佈式事務管理框架。阿里巴巴中間件團隊發起了開源項目 Fescar(Fast & EaSy Commit And Rollback, Fescar),和社區一起共建分佈式事務解決方案。爲了達到適用於所有的分佈式事務業務場景的目標,也爲了社區更中立、更開放、生態更加豐富,社區核心成員們決定進行品牌升級,改名 Seata。Seata 意爲:Simple Extensible Autonomous Transaction Architecture,是一套一站式分佈式事務解決方案。

 

seata組件:

    Transaction Coordinator(TC):管理全局的分支事務的狀態,用於全局性事務的提交和回滾。

Transaction Manager(TM):事務管理器,用於開啓全局事務、提交或者回滾全局事務,是全局事務的開啓者。

Resource Manager(RM):資源管理器,用於分支事務上的資源管理,向TC註冊分支事務,上報分支事務的狀態,接受TC的命令來提交或者回滾分支事務

 

原理分析:

    Seata的原理可以用2PC去理解,通過seata組件我們大概就能理解它嗯嗯意思,事務的最終提交或者回滾由事務管理器來監聽,解釋一下2PC,比如:你週末約着和兩朋友去吃火鍋,然後你問朋友A有時間沒有,A說有時間,再問B朋友,B朋友說:我也想去呀,項目上線,週末要加班,沒時間。這時候可能你就不太想去了。所有就取消活動了。這裏就可以把你自己當做事務管理器TM,也是事務的發起方.你朋友可以當做RM 資源管理器。兩階段也就是指的 : 第一階段你去問看看他們有沒有時間,然後他們反饋消息給你,第二階段就是你收到所有人的消息後,如果有不同意的,那麼就取消活動。

 

原理圖如下:

 

 

seata集成Springcloud:

 

  1. 1.seata服務器的搭建:大家可以去git上下載 :

  2. https://github.com/seata/seata/releases,

    國外鏡像比較慢,我這邊提供了CSDN地址: 

    https://download.csdn.net/download/zzxwx/12113503

  3. 2.進入解壓包的bin目錄啓動服務 命令: sh seata-server.sh -9 8091 -m file 控制檯輸出成功啓動server的字樣代表啓動成功

  4. 3.業務代碼的集成, 我這邊測試的項目結構如下:

5.rueka 作爲註冊中心,goods商品模塊,order訂單模塊,這邊我模擬用戶下單減商品庫存的操作。所以這邊發起方就可以理解爲訂單模塊,訂單模塊調用商品模塊,訂單記錄表插入一條記錄,商品模塊扣減商品庫存

 

6.引入seata jar包

<dependency>
   <groupId>com.alibaba.cloud</groupId>
   <artifactId>spring-cloud-alibaba-seata</artifactId>
   <version>2.1.0.RELEASE</version>
</dependency>

7.換數據源爲阿里的代理數據源,因爲失敗了,需要記錄日誌回滾  

源碼查看DataSourceConfig.java

8.主要是作爲錯誤記錄日誌,改寫原有數據源的方式

9.項目resource路徑下添加 registry.conf 和 file.conf regist.conf 中的

type=file 其實也支持 redis zk等等

10.文件file.conf 文件中的server 裏的屬性修改爲:vgroup_mappgin.自己的項目名-fesacar-service-group="default"

11.數據庫添加表 undo_log 用來記錄日誌,事務處理失敗後,用來回滾的日誌

12.然後發起方的service添加主鍵 @GlobalTransactional

13.至此所有集成完畢,可以開始愉快地測試代碼了訪問 order模塊 /userDownUser 可以測試下單 num爲100時候爲異常測試 查看order 和goods表的數據是否同時成功和失敗

 

最後感謝大家的閱讀,祝大家新年快樂,相親的能成功~

天冷碼字不易,你們的支持是我最大的動力,年後會給大家帶來面試題分析,敬請期待~

 

發佈了35 篇原創文章 · 獲贊 11 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章