解決分布式事務的方案 —— Seata

解決分布式事務的方案 —— Seata

1. 認識 Seata

解決分布式事務的方案有很多,但實現起來都比較復雜,因此我們一般會使用開源的框架來解決分布式事務問題。在眾多的開源分布式事務框架中,功能最完善、使用最多的就是阿里巴巴在 2019 年開源的 Seata 了。

Seata 的事務管理中有三個重要的角色:

  • TC(Transaction Coordinator)事務協調者:維護全局和分支事務的狀態,協調全局事務提交或回滾,相當于監控中心。
  • TM(Transaction Manager)事務管理器:定義全局事務的范圍、開始全局事務、提交或回滾全局事務。
  • RM(Resource Manager)資源管理器:管理分支事務,與TC交談以注冊分支事務和報告分支事務的狀態,并驅動分支事務提交或回滾。

2. 微服務集成 Seata

引入依賴

<!-- seata -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>

修改配置

seata:registry: # TC服務注冊中心的配置,微服務根據這些信息去注冊中心獲取tc服務地址type: nacos # 注冊中心類型 nacosnacos:server-addr: 192.168.101.68:8848 # nacos地址namespace: "" # namespace,默認為空group: DEFAULT_GROUP # 分組,默認是DEFAULT_GROUPapplication: seata-server # seata服務名稱tx-service-group: hmall # 事務組名稱service:vgroup-mapping: # 事務組與tc集群的映射關系hmall: "default"

3. Seata 工作模式

Seata 支持四種不同的分布式事務解決方案,Seata 默認使用的是 AT 模式:

  1. AT
  2. XA
  3. TCC
  4. SAGA

這四種方案可以滿足 CP 和 AP 的需求,比如:XA 可以實現 CP 即強一致性,AT 可以實現 AP 最終一致性,四種模式中 AT 模式使用較多,本課程重點講解AT模式。

3.1 AT 模式

工作流程圖


流程說明:

  1. TM 通知 TC 開啟全局事務,TC 記錄全局事務狀態;
  2. TM 調用所有 RM,開始執行分支事務,然后 RM 向 TC 注冊分支事務;
  3. RM 執行自己的 sql 并進行提交,同時記錄日志到 undolog 表中;
  4. RM 向 TC 匯報自己事務執行的狀態;
  5. TM 通知 TC,提交或回滾全局全局事務。TC 匯總所有 RM 的事務執行情況,并通知所有 RM 執行提交或回滾操作
    1. 提交:刪除 undolog 表中的日志
    2. 回滾:RM 根據各自 undolog 表中的日志,反向操作,操作成功后刪除 undolog 中的日志

3.2 XA 模式

工作流程圖


流程說明:

  1. TM 通知 TC 開啟全局事務,TC 記錄全局事務狀態;
  2. TM 通知所有 RM,開始執行分支事務,然后 RM 向 TC 注冊分支事務;
  3. RM 執行自己的 sql,然后向 TC 報告自己執行的事務狀態;
  4. TM 通知 TC,提交或回滾全局事務。TM 匯總所有 RM 分支的事務狀態,并通知所有 RM 執行提交或回滾的操作。

可見,AT 模式使用起來更加簡單,無業務侵入,性能更好。因此企業 90% 的分布式事務都可以用 AT 模式來解決。

3.3 TCC 模式

工作流程圖

流程:

  1. TM 通知 TC 開啟全局事務,TC 記錄全局事務狀態;
  2. TM 通知 RM 執行分支事務,RM 向 TC 注冊分支事務;
  3. RM 對將要操作的資源進行檢測和預留,將要執行的資源單獨分出來,并向 TC 匯報所執行的事務狀態;
  4. TM 通知 TC,提交或回滾全局事務。TC 統計匯總所有 RM 分支事務狀態,并通知所有 RM 執行提交或回滾的操作
    1. 提交:RM 執行 Congirm 操作,真正執行數據
    2. 回滾:RM 執行 cancel 操作,將隔離出來的資源返回

TCC 模式的每個階段是做什么的?

  • Try:資源檢查和預留
  • Confirm:業務執行和提交
  • Cancel:預留資源的釋放

3.4 SAGA 模式

工作流程圖

流程:

  1. TM 通知 TC 開啟全局事務,TC 記錄全局事務;
  2. TM 通知所有 RM 執行分支事務,RM 向 TC 注冊分支事務;
  3. RM 執行自己的 sql 業務,并向 TC 匯報分支事務執行的狀態;
  4. TM 通知 TC 提交或回滾全局事務。TC 匯總所有 RM 的事務狀態,并通知所有 RM 執行提交或回滾
    1. 提交:RM 執行提交操作
    2. 回滾:RM 通過回滾機制和補償機制進行回滾操作。

4. 小結

4.1 Seata 是怎么進行分布式事務控制的?

使用 Seata 的 AT 模式,AT 模式的底層使用的是 CAP 的 CP,保證數據的最終一致性。

4.2 Seata 的工作原理?

首先,Seata 是一個專門用于處理分布式事務的開源框架,它通過定義全局事務和分支事務的概念來實現分布式事務的控制,并支持多種模式,如 AT 模式、TCC 模式、SAGA 模式等。

核心概念:

  1. 事務協調器(TC):維護全局事務和分支事務的狀態,并驅動全局事務的提交或回滾。
  2. 事務管理器(TM):定義全局事務的邊界,即開始和結束全局事務。
  3. 資源管理器(RM):管理分支事務并報告分支事務的狀態給 TC,同時也負責分支事務的提交或回滾。

工作原理:

  1. 開始全局事務:TM 通知 TC 開啟一個全局事務,TC 生成一個全局唯一的 XID 用于標識這個全局事務。
  2. 執行分支事務:TM 通知 RM 執行分支事務,執行完成后向 TC 報告分支事務的狀態。
  3. 提交或回滾全局事務
    • 當所有分支事務都成功完成,TM 通知 TC 提交全局事務,TC 隨后指示各個 RM 提交對應的分支事務。
    • 如果任何一個分支事務失敗,TM 會通知 TC 回滾全局事務,TC 會指令各 RM 回滾各自的分支事務。

分布式事務模式

  • AT 模式:一種無侵入式的分布式事務解決方案,基于數據庫的 ACID 特性,自動完成數據的快照和補償操作,適合對業務代碼侵入性要求較低的場景。
  • TCC 模式:需要業務系統提供 Try、Confirm、Cancel 三個方法接口,適用于對一致性要求較高且能夠接受一定程度業務侵入的場景。
  • SAGA 模式:長事務解決方案,適用于長時間運行的業務流程,通過一系列子事務及其補償操作來保證最終一致性。

通過上述機制,Seata 實現了對分布式事務的有效管理和控制,也能夠保證事務的一致性和可靠性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73657.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73657.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73657.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Antd實現上傳下載csv文件

1 上傳 解析csv文件&#xff1a; import { parse } from papaparse;export function parseCSV(file: File): Promise<string[][]> {return new Promise((resolve, reject) > {const reader new FileReader();reader.onload () > {const csvData reader.result…

Asp.net Core API 本地化

本文是一個demo&#xff0c;演示了如何根據用戶接口查詢字段(正常放header中),設置當前culture&#xff0c;并獲取當前culture的key value給用戶提示 創建Resources文件夾&#xff0c;添加以下三個文件 其中ExceptionUnuse 是一個空的類&#xff0c;供IStringLocalizer使用&a…

MambaVision:一種Mamba-Transformer混合視覺骨干網絡

摘要 我們提出了一種新型混合Mamba-Transformer主干網絡&#xff0c;稱為MambaVision&#xff0c;該網絡專為視覺應用而設計。我們的核心貢獻包括重新設計Mamba公式&#xff0c;以增強其對視覺特征的高效建模能力。此外&#xff0c;我們還對將視覺Transformer&#xff08;ViT&…

{瞎掰} 手機安裝app問題:app簽名,手機 or OS官方商店 其他非官方app源,安全防護 突破限制

以下&#xff0c;在華為安卓系統手機中&#xff0c;在安裝app過程中得到的一些可能是錯誤的經驗。 商品化 app 的收錢方式&#xff1a;通過商店來收錢&#xff0c;通過 app 本身提供的注冊碼功能來收錢&#xff0c;或是其他的收錢方式。 手機安裝 app的特點 從官方商店里安裝…

【數據庫】Data Model(數據模型)數據模型分析

理解圖片中的 Data Model&#xff08;數據模型&#xff09;是學習數據庫設計和應用程序開發的重要一步。作為初學者&#xff0c;你可以通過比喻和簡單的解釋來理解這些概念以及它們之間的聯系。以下是對圖片中數據模型的詳細分析&#xff0c;以及如何理解它們之間的關系。 1. 數…

如何管理需求變更

管理需求變更的關鍵在于 明確變更流程、跨部門協同、數據驅動反饋。其中&#xff0c;明確變更流程要求在項目初期就建立嚴格的需求變更流程和審批機制&#xff0c;確保每一次變更都有據可依&#xff1b;跨部門協同強調各部門間緊密溝通&#xff0c;整合多方意見&#xff0c;以避…

每天五分鐘深度學習PyTorch:循環神經網絡RNN的計算以及維度信息

本文重點 前面我們學習了RNN從何而來,以及它的一些優點,我們也知道了它的模型的大概情況,本文我們將學習它的計算,我們來看一下RNN模型的每一個時間步在計算什么? RNN的計算 ht-1是上一時刻的輸出,xt是本時刻的輸入,然后二者共同計算得到了ht,然后yt通過ht計算得到,…

JSP+Servlet實現對數據庫增刪改查之進階mvc架構

1.Bean層&#xff08;Model層&#xff09;? 角色&#xff1a;就像餐廳里的“菜品”。?功能&#xff1a;是純數據對象&#xff08;如Person類&#xff09;&#xff0c;封裝屬性和 getter/setter&#xff08;例如用戶名、密碼&#xff09;。?示例&#xff1a;Person類 packa…

多任務學習與持續學習微調:深入探索大型語言模型的性能與適應性

引言 大型語言模型&#xff08;LLMs&#xff09;的出現極大地推動了自然語言處理領域的發展。為了使其在各種特定任務和動態環境中表現出色&#xff0c;微調技術至關重要。本節將深入探討多任務學習&#xff08;Multi-task Learning, MTL&#xff09;和持續學習&#xff08;Co…

Ubuntu24.04 啟動后突然進入tty,無法進入圖形界面

問題描述 昨晚在編譯 Android AOSP 14 后&#xff0c;進入了登錄頁面&#xff0c;但出現了無法輸入密碼的情況&#xff0c;且無法正常關機&#xff0c;只能強制重啟。重啟后&#xff0c;系統只能進入 TTY 頁面&#xff0c;無法進入圖形界面。 問題排查 經過初步排查&#x…

圖論——廣度優先搜索實現

99. 島嶼數量 題目描述 給定一個由 1(陸地)和 0(水)組成的矩陣,你需要計算島嶼的數量。島嶼由水平方向或垂直方向上相鄰的陸地連接而成,并且四周都是水域。你可以假設矩陣外均被水包圍。 輸入描述 第一行包含兩個整數 N, M,表示矩陣的行數和列數。 后續 N 行,每行…

【sql靶場】第13、14、17關-post提交報錯注入保姆級教程

目錄 【sql靶場】第13、14、17關-post提交報錯注入保姆級教程 1.知識回顧 1.報錯注入深解 2.報錯注入格式 3.使用的函數 4.URL 5.核心組成部分 6.數據編碼規范 7.請求方法 2.第十三關 1.測試閉合 2.列數測試 3.測試回顯 4.爆出數據庫名 5.爆出表名 6.爆出字段 …

[項目]基于FreeRTOS的STM32四軸飛行器: 六.2.4g通信

基于FreeRTOS的STM32四軸飛行器: 六.2.4g通信 一.Si24Ri原理圖二.Si24R1芯片手冊解讀三.驅動函數講解五.移植2.4g通訊&#xff08;飛控部分&#xff09;六.移植2.4g通訊&#xff08;遙控部分&#xff09;七.通訊模塊的完成&#xff08;遙控部分&#xff09; 一.Si24Ri原理圖 S…

PyQt6內嵌http.server Web 和Flask Web服務器方法詳解

PyQt6 可以內嵌一個簡單的 Web 服務器。雖然 PyQt6 本身不提供直接的 Web 服務器功能&#xff0c;但可以結合 Python 的標準庫&#xff08;如 http.server&#xff09;或其他 Web 框架&#xff08;如 Flask、FastAPI 等&#xff09;來實現。 示例&#xff1a;使用 http.server…

【源碼分析】Nacos實例注冊流程分析-事件驅動框架

【踩坑記錄】 本人下載的Nacos 服務端版本是2.3.2&#xff0c;在開始進行源碼編譯便遇到問題&#xff0c;下面是各個問題記錄 源碼大量爆紅 在最開始用Idea加載Maven項目的時候&#xff0c;發現項目中大量的代碼爆紅&#xff0c;提示其類或者包不存在&#xff0c;后來結果查…

Unity物理射線濾除某層

關鍵點&#xff1a;使用LayerMask&#xff0c;針對Physics里檢測collider的射線&#xff08;raycast、OverlapSphere...&#xff09;都適用 1.使用layerMask過濾層 int ignoreLayer LayerMask.NameToLayer("IgnoreRaycast");// 獲取要忽略的層 int layerMask ~(1…

【白話神經網絡(二)】矩陣、CNN、RNN

全連接層 回顧前面學過的知識&#xff1a; 一個最簡單的神經網絡&#xff0c;就是ywxb 套上一個激活函數。 如果有多個輸入&#xff0c;那就是多個w和x 如果有多個輸出&#xff0c;那就再來一行公式&#xff0c;多一組w和b 要是神經元多了的話&#xff0c;公式密密麻麻的&…

Unity教程(二十二)技能系統 分身技能

Unity開發2D類銀河惡魔城游戲學習筆記 Unity教程&#xff08;零&#xff09;Unity和VS的使用相關內容 Unity教程&#xff08;一&#xff09;開始學習狀態機 Unity教程&#xff08;二&#xff09;角色移動的實現 Unity教程&#xff08;三&#xff09;角色跳躍的實現 Unity教程&…

深入解析Java面向對象三大特征之多態、final、抽象類與接口

面向對象編程&#xff08;OOP&#xff09;的三大核心特征為封裝、繼承、多態&#xff0c;其中多態是最具靈活性和擴展性的特性。本文將從多態的本質出發&#xff0c;結合final關鍵字、抽象類與接口的設計&#xff0c;深入探討這些概念的應用場景及其在代碼中的實現細節&#xf…

編碼器和解碼器概念及算法示例【清晰易懂】

編碼器&#xff08;Encoder&#xff09;和解碼器&#xff08;Decoder&#xff09;是處理信息的一對“搭檔”&#xff0c;它們的作用就像是“翻譯員”和“逆翻譯員”。 1. 編碼器&#xff08;Encoder&#xff09;是什么&#xff1f; &#x1f449; 把原始信息變成另一種形式&a…