Seata原理分析

簡介

Apache Seata? (incubating) 是什么?

Seata 是一款開源的分布式事務解決方案,致力于在微服務架構下提供高性能和簡單易用的分布式事務服務。在 Seata 開源之前,其內部版本在阿里系內部一直扮演著應用架構層數據一致性的中間件角色,幫助經濟體平穩的度過歷年的雙11,對上層業務進行了有力的技術支撐。經過多年沉淀與積累,其商業化產品先后在阿里云、金融云上售賣。2019.1 為了打造更加完善的技術生態和普惠技術成果,Seata 正式宣布對外開源,未來 Seata 將以社區共建的形式幫助用戶快速落地分布式事務解決方案。

Seata 原理深度解析:分布式事務的一致性實現

一、核心架構設計

Seata 采用?三組件模型,通過解耦事務協調與資源管理,實現分布式事務的高效處理:

1.1 核心組件

組件角色關鍵功能
TC (協調器)獨立部署的服務器,作為全局事務的控制中心- 維護全局事務狀態(開始/提交/回滾)
- 協調分支事務的提交/回滾
- 存儲事務元數據(XID、分支ID等)
TM (管理器)嵌入微服務中的客戶端組件,定義全局事務邊界- 發起全局事務(生成XID)
- 通知TC提交或回滾事務
- 管理事務上下文(XID傳播)
RM (資源管理器)嵌入微服務中的客戶端組件,管理分支事務與本地資源交互- 注冊分支事務到TC
- 執行本地SQL并生成回滾日志(UNDO_LOG)
- 響應TC的提交/回滾命令

1.2 協作流程

  1. 全局事務啟動:TM 向 TC 發起?begin?請求,TC 生成全局唯一 XID。
  2. 分支事務注冊:RM 向 TC 注冊分支事務,綁定 XID。
  3. 執行本地事務:RM 執行 SQL,生成?前鏡像(Before Image)?和?后鏡像(After Image),記錄到 UNDO_LOG 表。
  4. 提交/回滾決策
    • 成功:TM 通知 TC 提交,TC 依次通知 RM 提交分支事務(刪除 UNDO_LOG)。
    • 失敗:TM 通知 TC 回滾,TC 通知 RM 通過前鏡像恢復數據。

二、事務模式詳解

Seata 支持四種事務模式,覆蓋不同場景的需求:

2.1 AT 模式(默認模式)

  • 原理:基于 SQL 解析的自動補償,無需手動編碼。
    • 一階段:解析 SQL,生成前后鏡像并插入 UNDO_LOG,提交本地事務。
    • 二階段
      • 提交:異步刪除 UNDO_LOG,釋放資源。
      • 回滾:通過前鏡像恢復數據,校驗后鏡像防止臟寫。
  • 適用場景:常規業務(如電商訂單、庫存管理),零代碼入侵。

2.2 TCC 模式(Try-Confirm-Cancel)

  • 原理:手動實現三階段接口,精細控制事務。
    • Try:預留資源(如凍結賬戶余額)。
    • Confirm:確認預留資源(如扣除凍結金額)。
    • Cancel:釋放預留資源(如解凍余額)。
  • 適用場景:金融支付、高并發資金操作,需精確控制事務流程。

2.3 SAGA 模式(長事務補償)

  • 原理:通過狀態機編排子事務,支持反向補償。
    • 正向流程:按順序執行子事務并提交。
    • 補償流程:任一子事務失敗時,反向執行補償操作(如撤銷訂單、退款)。
  • 適用場景:跨系統業務流程(如訂單→物流→支付)、長周期事務(如保險理賠)。

2.4 XA 模式(依賴數據庫協議)

  • 原理:基于數據庫原生 XA 協議,實現強一致性。
    • 兩階段提交:準備階段鎖定資源,提交階段持久化變更。
  • 適用場景:傳統系統遷移、強一致性要求的核心系統(如銀行核心交易)。

三、數據一致性保障機制

3.1 兩階段提交(2PC)優化

  • 準備階段
    • RM 執行 SQL 并生成 UNDO_LOG,鎖定資源(行級鎖)。
    • 向 TC 注冊分支事務,等待全局決策。
  • 提交階段
    • 異步提交:分支事務提交后,異步刪除 UNDO_LOG,減少阻塞。
    • 批量操作:合并分支事務操作,降低 TC 負載。

3.2 全局鎖與隔離級別

  • 全局鎖:防止臟寫,確保分支事務提交前獲取鎖。
  • 隔離級別
    • 默認:全局讀未提交(Read Uncommitted),但通過全局鎖避免臟讀。
    • 實際效果:接近讀已提交(Read Committed),平衡性能與一致性。

3.3 異常處理

  • 自動回滾:任一分支失敗時,TC 觸發全局回滾,RM 通過 UNDO_LOG 恢復數據。
  • 懸掛處理:TCC 模式中,若 Try 未執行但 Cancel 先到,則拒絕執行,避免資源錯誤釋放。
  • 冪等控制:通過 XID 和 Branch ID 確保操作重復執行時的狀態一致性。

四、性能優化策略

4.1 存儲模式

模式性能可靠性適用場景
文件單機調試、非生產環境
DBTC 集群模式、生產環境
Redis高并發、低延遲場景

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

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

相關文章

力扣 30 天 JavaScript 挑戰 第38天 (第九題)學習了 語句表達式的區別 高級函數 promise async await 節流

開始答題 版本一: /*** param {Function} fn* return {Function}*/ var once function(fn) {let runCount0return function(...args){runCountrunCount 1 ? return fn(...args) :return undefined} };/*** let fn (a,b,c) > (a b c)* let onceFn once(fn)…

25年八月份寧德時代社招部分崗位入職Verify測評演繹數字推理SHL題型變更、題庫使用說明

開始測評前,請注意:1、挑選一個安靜的環境,選擇一臺網速正常且無任何網絡端口限制的電腦進行測評;2、移動設備無法兼容遠程監考功能,請使用配備有可正常運作的攝像頭的臺式機或筆記本電腦,建議使用最新版本的Chrome,Fi…

【KO】前端面試四

以下是剩余題目的詳細解答,結合前端知識體系和實際應用場景展開: 91. JS 放在 head 里和放在 body 里有什么區別? 對比維度 放在 <head> 放在 <body> 加載阻塞性 會阻塞頁面渲染,需等待 JS 下載/執行完成后,才繼續渲染頁面 一般放在 </body> 前,頁面渲…

[Vid-LLM] 數據集 | 基準測試

第5章&#xff1a;數據集與基準測試 在前一章中&#xff0c;我們探討了**視頻大語言模型(Vid-LLMs)**能夠執行的各種"工作"或"功能"&#xff0c;從視頻總結到充當智能代理。 我們了解了它們的構建方式和扮演的角色。 但這里有個關鍵問題&#xff1a;這些驚…

34、擴展倉儲管理系統 (跨境汽車零部件模擬) - /物流與倉儲組件/extended-warehouse-management

76個工業組件庫示例匯總 擴展倉儲管理系統 (跨境汽車零部件模擬) 概述 這是一個高級的倉儲管理系統 (WMS) 模擬組件&#xff0c;專為展示跨境汽車零部件的復雜物流場景而設計。它模擬了從海外供應商發貨&#xff0c;經過海運/空運、清關、質檢&#xff0c;到最終入庫上架&am…

nodejs koa留言板案例開發

包含功能 登錄注冊(不開放注冊只是用固定的賬號信息) 查看列表 查看詳情 發布信息 編輯信息 刪除信息 項目接口 npm init -y npm install koa --save npm istall koa-router --save (舊版本) 或者 npm install koa/router --save &#xff08;新版本&#xff09; npm instal…

4+ 圖論高級算法

強連通分量 基礎概念 強連通&#xff1a;在有向圖 GGG 中&#xff0c;如果兩個點 uuu 和 vvv 是互相可達的&#xff0c;即從 uuu 出發可以到達 vvv , 從 vvv 也可以到達 uuu , 則稱 uuu 和 vvv 是強連通的。如果 GGG 中任意兩個點都是互相可達的&#xff0c;則稱 GGG 是強連通圖…

從羅永浩訪談李想中學習現代家庭教育智慧

引言 在這個信息爆炸的時代&#xff0c;每個父母都在尋找培養孩子的最佳方式。在羅永浩與理想汽車創始人李想的深度訪談中&#xff0c;我們看到了一個成功企業家童年成長的真實樣本。李想的成長經歷為現代家庭教育提供了許多值得深思的啟示。 一、正義感與樂觀精神的種子 李想回…

AI實現超級客戶端打印 支持APP 網頁 小程序 調用本地客戶端打印

核心思路都是&#xff1a;需要一個安裝在用戶電腦上的“中間人”程序&#xff08;本地客戶端&#xff09;來接管打印任務&#xff0c;然后通過某種通信方式命令這個客戶端進行打印。下面我將分平臺詳細闡述各種實現思路、優缺點和適用場景。一、核心思路與公共組件&#xff1a;…

Java集合(Collection、Map、轉換)

? 推薦使用 ? 已過時 1. Collection Collection 是集合框架的根接口之一&#xff0c;它是所有單列集合&#xff08;如 List、Set、Queue 等&#xff09;的公共父接口。Collection 接口定義了集合的基本操作&#xff0c;比如添加、刪除、遍歷等。 Collection ├── List │ …

全國網絡安全知識競賽有哪些

全國范圍內有多種類型的網絡安全知識競賽&#xff0c;涵蓋國家級、行業級、高校、青少年和企業等多個維度。以下是主要的網絡安全知識競賽分類及詳細介紹&#xff1a;一、國家級網絡安全競賽"強網杯"全國網絡安全挑戰賽主辦單位&#xff1a;中央網信辦、河南省人民政…

系統架構設計師備考第1天——系統架構概述

一、架構本質與角色定位架構 系統的骨架 ? 核心作用&#xff1a; 決定系統的健壯性、生命周期、擴展性銜接需求與實現&#xff0c;保障早期質量 &#x1f468;&#x1f4bb; 架構師核心能力&#xff1a;能力維度具體要求技術掌控力精通基礎技術&#xff0c;洞悉局部瓶頸決策設…

c#實現鼠標mousemove事件抽稀,避免大數據阻塞網絡

這個封裝類可以獨立于具體的網絡傳輸邏輯&#xff0c;為任何需要減少鼠標移動數據量的應用提供靈敏度和數據量優化。 核心優化功能 1. 靈敏度調整 // 減少微小移動的數據發送 (2, 1) 0.5 → (1, 0) // 忽略微小移動2. 移動累積 // 累積多次小移動&#xff0c;批量發送 (1, 0) …

機器學習 [白板推導](十三)[條件隨機場]

? 17. 條件隨機場&#xff08;Conditional Random Field&#xff0c;CRF&#xff09; 17.1. 背景 機器學習分類模型中&#xff0c;有硬分類和軟分類兩種主流思想&#xff0c;其中硬分類模型有支持向量機SVM&#xff08;最大化幾何間隔&#xff09;、感知機PLA&#xff08;誤…

調味品生產過程優化中Ethernet/IP轉ProfiNet協議下施耐德 PLC 與歐姆龍 PLC 的關鍵通信協同案例

案例背景在食品飲料行業&#xff0c;生產過程的精準控制對于保證產品質量和安全至關重要。某知名食品飲料企業的生產線上&#xff0c;前處理、灌裝和包裝環節采用了基于 ProfiNet 主站的施耐德 M340 系列 PLC 進行控制&#xff0c;以確保生產過程的穩定性和精確性。而原料倉儲和…

Elasticsearch vs 單表LIKE查詢性能對比

關鍵因素影響 1、索引結構&#xff1a; .Elasticsearch使用倒排索引&#xff0c;特別適合文本搜索 .傳統數據庫即使有索引&#xff0c;對LIKE %keyword%這種模式也無法有效利用 2、查詢復雜度&#xff1a; .簡單查詢&#xff1a;ES快5-10倍 .復雜組合查詢&#xff1a;ES可能快1…

如何通過WordPress聯盟營銷獲取潛在客戶

您是否經營著一個銷售周期較長的業務&#xff1f; 那么你就會知道&#xff0c;從首次訪問者那里獲得立即銷售的機會是很少見的。 當然&#xff0c;您的潛在客戶在進行重大投資之前需要時間進行研究、比較各種方案并建立信任。這時&#xff0c;聯盟營銷線索挖掘就成為您的秘密…

git實戰(8)git高階命令分析【結合使用場景】

以下是 Git 高階命令分享&#xff0c;涵蓋高效協作、歷史重構、問題排查等場景&#xff0c;助你成為 Git 高手&#xff1a; 一、歷史重構與清理 1. 交互式變基&#xff08;改寫歷史&#xff09; git rebase -i HEAD~3 # 修改最近3次提交操作選項&#xff1a; reword&#xff1…

生成一個豎直放置的div,寬度是350px,上面是標題固定高度50px,下面是自適應高度的div,且有滾動條

<!-- 我要生成一個豎直放置的div&#xff0c;寬度是350px&#xff0c;上面是標題固定高度50px&#xff0c;下面是自適應高度的div&#xff0c;且有滾動條。 --><style>html,body{/* height:100vh; */margin:10px; padding:10px;} </style><div style"…

題解:P13754 【MX-X17-T3】Distraction_逆序對_前綴和_Ad-hoc_算法競賽C++

Beginning 這道題思維難度很大&#xff0c;有兩個難點其實都不好解決&#xff0c;但因為其代碼太過弱智所以只是綠題。 本題解詳細地分析了做題時的歷程與思路&#xff0c;所以希望大家可以仔細地完整閱讀。 Analysis 首先先大體觀察一下題目的性質&#xff1a;nnn 是排列&…