日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Spring Cloud Alibaba —— Seata 分布式事务框架

發(fā)布時(shí)間:2025/3/12 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud Alibaba —— Seata 分布式事务框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)航

  • 一、Seata 介紹
  • 二、Seata 的工作原理
    • 2.1 三個(gè)角色
    • 2.2 工作流程
  • 三、Seata AT 工作機(jī)制
    • 3.1 一階段
    • 3.2 二階段
  • 四、案例演示(待補(bǔ)充)

一、Seata 介紹

官網(wǎng):Seata 官網(wǎng)

Seata 是2019 年阿里巴巴中間件團(tuán)隊(duì)發(fā)起的開源項(xiàng)目,其前身是 Fescar(Fast & EaSy Commit And Rollback)。其愿景是讓分布式的使用像本地事務(wù)的使用一樣簡(jiǎn)單、高效,并逐步解決開發(fā)者遇到的分布式事務(wù)方面的所有難題。

Seata 意為 Simple Extensible Autonomous Transaction Architecture,簡(jiǎn)單可擴(kuò)展自治分布式框架。

Seata 的設(shè)計(jì)目標(biāo)是對(duì)業(yè)務(wù)無(wú)侵入,因此從業(yè)務(wù)無(wú)侵入的 2PC 方案入手,在傳統(tǒng) 2PC 的基礎(chǔ)上擴(kuò)展,把一個(gè)分布式事務(wù)理解成一個(gè)包含若干分支事務(wù)的全局事務(wù)

二、Seata 的工作原理

2.1 三個(gè)角色

1、TC:Transaction Coordinator 事務(wù)協(xié)調(diào)器,管理全局的分支事務(wù)狀態(tài),用于全局性事務(wù)的提交和回滾。
2、TM:Transaction Manager 事務(wù)管理器,用于開啟、提交或回滾全局事務(wù)。
3、RM:Resource Manager 資源管理器,用于分支事務(wù)上的資源管理,向 TC 注冊(cè)分支事務(wù),上報(bào)分支事務(wù)的狀態(tài),接收 TC 的命令來提交或回滾分支事務(wù)。

2.2 工作流程

假設(shè)上圖中的三個(gè)服務(wù)根據(jù)調(diào)用關(guān)系為 A–> B–>C,那么 Seata 的執(zhí)行流程如下:

1、A 服務(wù)的TM 向TC申請(qǐng)開啟一個(gè)全局事務(wù),TC會(huì)創(chuàng)建一個(gè)全局事務(wù)并返回一個(gè) 唯一的 XID。
2、A 服務(wù)的 RM向 TC注冊(cè)分支事務(wù),并將其納入 XID 對(duì)應(yīng)全局事務(wù)的管轄。
3、A 服務(wù)執(zhí)行分支事務(wù),操作數(shù)據(jù)庫(kù)。
4、A 服務(wù)開始遠(yuǎn)程調(diào)用 B 服務(wù),此時(shí)XID 會(huì)在微服務(wù)的調(diào)用鏈上傳播。
5、B 服務(wù)的 RM 向TC 注冊(cè)分支事務(wù),并將其納入 XID 對(duì)應(yīng)的全局事務(wù)的管轄。
6、B 服務(wù)執(zhí)行分支事務(wù),操作數(shù)據(jù)庫(kù)。
7、全局事務(wù)調(diào)用鏈處理完畢,TM 根據(jù)有無(wú)異常向 TC 發(fā)起全局事務(wù)的提交或回滾。
8、TC 協(xié)調(diào)其管轄下的所有分支事務(wù),決定是否回滾。

Seata 實(shí)現(xiàn) 2PC 與傳統(tǒng) 2PC 的區(qū)別:

1、架構(gòu)層次方面,傳統(tǒng) 2PC 方案的 RM 實(shí)際上是在數(shù)據(jù)庫(kù)層,RM 本質(zhì)就是數(shù)據(jù)庫(kù),通過 XA 協(xié)議實(shí)現(xiàn),而 Seata 的 RM 是以 jar 包的形式作為中間件層部署在應(yīng)用程序這一側(cè)的。
2、兩階段提交方面,傳統(tǒng) 2PC 無(wú)論第二階段的決議是 commit 還是 rollback ,事務(wù)性資源的鎖都要保持到 Phase 2 完成才釋放。而 Seata 的做法是在 Phase 1 就將本地事務(wù)提交,這樣就可以省去 Phase 2 持鎖的時(shí)間,整體提高效率。

三、Seata AT 工作機(jī)制

Seata 在 2PC 提交模型的基礎(chǔ)上進(jìn)行了演進(jìn),視為 Seata AT 模式。除此之外,還有 Seata TCC模式、Seata XA 模式等。

Seata AT 模式非常簡(jiǎn)單,也是兩階段提交。

  • 一階段:業(yè)務(wù)數(shù)據(jù)和回滾日志記錄在同一個(gè)本地事務(wù)中提交,釋放本地鎖和連接資源。
  • 二階段:- 異步提交,快速完成;- 回滾,通過一階段回滾日志進(jìn)行反向補(bǔ)償
  • 下面以一個(gè)簡(jiǎn)單示例說明整體 AT 模式的工作機(jī)制,參考原文:Seata AT 模式

    3.1 一階段

    商品表:product :

    FieldTypeKey
    idbigint(20)PRI
    namevarchar(100)
    sincevarchar(100)

    業(yè)務(wù)邏輯:

    update product set name = 'GTS' where name = 'TXC';

    1、解析SQL:得到 Sql 類型(update),表(product),條件等信息。
    2、查詢前鏡像:根據(jù)解析得到的條件,生成查詢語(yǔ)句,定位數(shù)據(jù):

    select id, name, since from product where name = 'TXC'; idnamesince
    1TXC2014

    3、執(zhí)行業(yè)務(wù) SQL:更新這條記錄的 name 為 ‘GTS’。
    4、查詢后鏡像:根據(jù)前鏡像的結(jié)果,通過 主鍵 定位數(shù)據(jù)。

    select id, name, since from product where id = 1; idnamesince
    1GTS2014

    5、插入回滾日志:把前后鏡像數(shù)據(jù)以及業(yè)務(wù) SQL 相關(guān)的信息組成一條回滾日志記錄,插入到 UNDO_LOG 表中。

    {"branchId": 641789253,"undoItems": [{"afterImage": {"rows": [{"fields": [{"name": "id","type": 4,"value": 1}, {"name": "name","type": 12,"value": "GTS"}, {"name": "since","type": 12,"value": "2014"}]}],"tableName": "product"},"beforeImage": {"rows": [{"fields": [{"name": "id","type": 4,"value": 1}, {"name": "name","type": 12,"value": "TXC"}, {"name": "since","type": 12,"value": "2014"}]}],"tableName": "product"},"sqlType": "UPDATE"}],"xid": "xid:xxx" }

    6、提交前,向 TC 注冊(cè)分支:申請(qǐng) product 表中,主鍵值等于 1 的記錄的 全局鎖 。
    7、本地事務(wù)提交:業(yè)務(wù)數(shù)據(jù)的更新和前面步驟中生成的 UNDO LOG 一并提交。
    8、將本地事務(wù)提交的結(jié)果上報(bào)給 TC。

    3.2 二階段

    回滾
    1、收到 TC 的分支回滾請(qǐng)求,開啟一個(gè)本地事務(wù),執(zhí)行如下操作。
    2、通過 XID 和 Branch ID 查找到相應(yīng)的 UNDO LOG 記錄。
    3、數(shù)據(jù)校驗(yàn):拿 UNDO LOG 中的后鏡與當(dāng)前數(shù)據(jù)進(jìn)行比較,如果有不同,說明數(shù)據(jù)被當(dāng)前全局事務(wù)之外的動(dòng)作做了修改。這種情況,需要根據(jù)配置策略來做處理,詳細(xì)的說明在另外的文檔中介紹。
    4、根據(jù) UNDO LOG 中的前鏡像和業(yè)務(wù) SQL 的相關(guān)信息生成并執(zhí)行回滾的語(yǔ)句:

    update product set name = 'TXC' where id = 1;

    5、提交本地事務(wù)。并把本地事務(wù)的執(zhí)行結(jié)果(即分支事務(wù)回滾的結(jié)果)上報(bào)給 TC。

    提交
    1、收到 TC 的分支提交請(qǐng)求,把請(qǐng)求放入一個(gè)異步任務(wù)的隊(duì)列中,馬上返回提交成功的結(jié)果給 TC。
    2、異步任務(wù)階段的分支提交請(qǐng)求將異步和批量地刪除相應(yīng) UNDO LOG 記錄。

    四、案例演示(待補(bǔ)充)

    演示一個(gè)電商下訂單扣庫(kù)存的應(yīng)用案例,看下 Seata 是如何使用的。

    總結(jié)

    以上是生活随笔為你收集整理的Spring Cloud Alibaba —— Seata 分布式事务框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。