什么是Seata?

深入解析Seata:分布式事務的終極解決方案

什么是Seata?

Seata(Simple Extensible Autonomous Transaction Architecture)是一款開源的分布式事務解決方案,由阿里巴巴中間件團隊于2019年1月發起并開源(最初名為Fescar),后捐贈給Apache基金會孵化3。它旨在解決微服務架構下的分布式事務難題,讓分布式事務的使用像本地事務一樣簡單高效。

想象一下這個場景:你去銀行轉賬,操作1是從你的賬戶扣款1000元,操作2是向對方賬戶增加1000元。如果操作1成功但操作2失敗,你的錢就"憑空消失"了!這就是典型的分布式事務問題1。在微服務架構中,不同服務可能使用不同的數據庫,如何保證多個服務的操作要么全部成功,要么全部失敗?Seata就是為了解決這類問題而生的。

為什么需要Seata?

在傳統的單體應用中,我們通常使用數據庫的本地事務(ACID特性)來保證數據一致性。但在微服務架構下:

  1. 服務拆分:一個業務操作可能涉及多個微服務

  2. 數據庫拆分:數據可能分散在不同的數據庫實例甚至不同類型的數據庫中

  3. 跨網絡調用:服務間通過網絡通信,存在不確定性

這些變化使得傳統的本地事務無法滿足需求,我們需要分布式事務來保證跨服務、跨數據庫的數據一致性。而Seata就是目前最流行的分布式事務解決方案之一。

Seata的核心架構

Seata的架構包含三個核心角色37:

  1. TC(Transaction Coordinator):事務協調者,管理全局事務和分支事務的狀態,驅動全局事務提交或回滾(獨立部署的Seata-Server)

  2. TM(Transaction Manager):事務管理器,定義全局事務的范圍(開始、提交、回滾),通常位于業務入口方法

  3. RM(Resource Manager):資源管理器,管理分支事務的資源,與TC通信注冊分支事務并報告狀態,驅動分支事務的提交或回滾

用銀行轉賬的例子類比1:

  • TM是銀行柜員,負責發起轉賬事務

  • RM1是你的賬戶服務,RM2是對方賬戶服務

  • TC是銀行總部,決定最終是轉賬成功還是回滾

Seata的四種事務模式

Seata提供了四種事務模式,適用于不同場景510:

1. AT模式(自動補償,默認模式)

原理:基于兩階段提交協議演進,但對業務無侵入

  • 一階段:業務數據和回滾日志(undo_log)在同一個本地事務中提交,釋放本地鎖

  • 二階段:如果是提交則異步刪除undo_log;如果是回滾則通過undo_log生成反向SQL進行補償1

優點

  • 對業務代碼零侵入(只需加@GlobalTransactional注解)

  • 性能較好(一階段就提交本地事務)

  • 支持大多數關系型數據庫

缺點

  • 依賴數據庫的本地事務能力

  • 默認隔離級別是讀未提交(可能讀到中間狀態)

  • 存在全局鎖競爭問題

適用場景:大多數需要分布式事務的業務場景,特別是對代碼侵入性要求低的場景

2. TCC模式(Try-Confirm-Cancel)

原理:將業務邏輯拆分為三個階段5:

  1. Try:資源檢查和預留

  2. Confirm:確認執行業務操作(Try成功則Confirm必須成功)

  3. Cancel:取消操作,釋放預留資源

優點

  • 不依賴數據庫事務,可用于非關系型數據庫

  • 性能最好(無全局鎖)

  • 可以自定義業務邏輯,靈活性高

缺點

  • 代碼侵入性強(需要實現Try/Confirm/Cancel三個接口)

  • 需要考慮空回滾、冪等、懸掛等問題

  • 開發復雜度高

適用場景:對性能要求高、能接受一定代碼侵入的場景,如訂單-庫存-賬戶等強一致性業務

3. Saga模式

原理:長事務解決方案10

  • 一階段:直接提交本地事務

  • 二階段:成功則不做任何操作;失敗則通過補償業務回滾

優點

  • 一階段直接提交,無鎖,性能好

  • 適合長流程業務

  • 可集成遺留系統

缺點

  • 無隔離性,可能出現臟寫

  • 補償機制需要手動實現

  • 一致性最弱

適用場景:業務流程長、對實時一致性要求不高的場景,如旅行訂票系統(訂機票、酒店、租車等)

4. XA模式

原理:基于數據庫XA協議的傳統兩階段提交10

  • 一階段:準備階段(執行但不提交)

  • 二階段:提交或回滾

優點

  • 強一致性,滿足ACID

  • 實現簡單,無代碼侵入

缺點

  • 性能差(資源鎖定時間長)

  • 依賴數據庫對XA協議的支持

適用場景:對一致性要求極高、能接受性能損失的場景

Seata AT模式的深度解析

作為Seata的默認模式,AT模式值得特別關注。讓我們深入看看它的工作原理14:

一階段流程

  1. 解析SQL:得到SQL類型、表、條件等信息

  2. 查詢前鏡像(before image):根據解析結果生成查詢語句,獲取數據修改前的狀態

  3. 執行業務SQL

  4. 查詢后鏡像(after image):獲取數據修改后的狀態

  5. 插入回滾日志(undo_log):包含前后鏡像數據

  6. 向TC注冊分支事務并獲取全局鎖

  7. 提交本地事務(業務數據+undo_log一起提交)

二階段提交

如果所有分支事務都成功:

  1. TC異步通知各RM刪除對應的undo_log

  2. 釋放全局鎖

二階段回滾

如果有分支事務失敗:

  1. RM根據XID和Branch ID查找undo_log

  2. 數據校驗:比較當前數據和after image是否一致(檢查臟寫)

  3. 根據before image生成反向SQL并執行

  4. 刪除undo_log

  5. 釋放全局鎖

AT模式的關鍵設計

  1. undo_log機制:回滾的核心,記錄數據修改前后的狀態1

  2. 全局鎖:防止臟寫,只有持有全局鎖的事務才能修改數據4

  3. 數據鏡像:before image用于回滾,after image用于臟寫檢查10

Seata的實際應用

如何集成Seata

  1. 部署TC服務:下載Seata Server并配置存儲模式(文件或數據庫)7

  2. 客戶端配置

    • 添加Seata依賴

    • 配置Seata注冊中心、配置中心

    • 創建undo_log表(AT模式需要)

  3. 代碼使用:在分布式事務入口方法添加@GlobalTransactional注解1

示例代碼(AT模式)

@Service
public class OrderService {@Autowiredprivate AccountFeignClient accountFeignClient;@GlobalTransactionalpublic void createOrder(Order order) {// 1. 創建訂單(本地事務)orderMapper.insert(order);// 2. 扣減賬戶余額(遠程調用)accountFeignClient.decrease(order.getUserId(), order.getMoney());// 如果任意步驟失敗,整個事務會回滾}
}

生產環境建議

  1. TC高可用:部署Seata-Server集群+數據庫HA1

  2. 混合模式:核心業務用TCC,普通業務用AT1

  3. 監控告警:監控全局事務成功率、耗時等指標

  4. 性能優化:合理設置全局鎖超時時間,避免長時間阻塞

Seata的優缺點

優點15

  1. 多模式支持:覆蓋AT、TCC、SAGA、XA四種模式,適應不同場景

  2. 開箱即用:AT模式對業務代碼侵入小,集成簡單

  3. 社區活躍:阿里巴巴開源,已捐贈Apache孵化

  4. 高性能:相比傳統XA模式,減少了資源鎖定時間

缺點和挑戰110

  1. TC單點問題:雖然支持集群部署,但仍有單點風險

  2. 性能損耗:AT模式的全局鎖和undo_log會帶來一定開銷

  3. 隔離性問題:AT模式默認讀未提交,可能讀到中間狀態

  4. 復雜場景支持:某些復雜業務場景可能需要結合其他方案(如消息隊列)

Seata與其他方案的對比

方案一致性性能侵入性適用場景
Seata AT最終一致大多數分布式事務場景
Seata TCC最終一致高性能要求的場景
本地消息表最終一致異步消息場景
SAGA最終一致長流程業務
XA強一致強一致性要求的場景

最佳實踐和經驗分享

  1. 合理選擇模式:不要一味使用AT模式,根據業務特點選擇最適合的模式5

  2. 事務粒度控制:分布式事務范圍不宜過大,盡量拆分

  3. 異常處理:做好冪等設計和異常處理,特別是TCC模式10

  4. 性能優化

    • 減少全局鎖持有時間

    • 避免在分布式事務中做耗時操作

    • 合理設置超時時間

  5. 監控告警:建立完善的監控體系,及時發現和處理問題事務

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

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

相關文章

【系統規劃與管理師第二版】1.3 新一代信息技術及發展

一、物聯網 物聯網(IoT)是指通過信息傳感設備,按約定的協議將任何物品與互聯網相連接,進行信息交換和通信,以實現智能化識別、定位、跟蹤、監控和管理的網絡。物聯網主要解決物品與物品(T2T)、人…

在Spring Boot中自定義JSON返回日期格式的指南

在開發Spring Boot應用時,很多時候需要在返回的JSON數據中以特定格式顯示日期和時間。例如,使用LocalDateTime、Date等類型的字段時,默認的序列化格式可能不是你期望的路徑。本文將介紹如何在Spring Boot中實現控制返回JSON數據的日期格式&am…

【大數據高并發核心場景實戰】 - 數據持久化之冷熱分離

大數據高并發核心場景實戰 - 數據持久化之冷熱分離 當云計算平臺的業務后臺處理工單突然接入客服系統的請求洪流,每日新增10萬工單,3000萬主表1.5億明細表的數據庫開始呻吟——是時候請出「冷熱分離」這劑退燒藥了! 一、業務場景:…

【AI Study】第四天,Pandas(6)- 性能優化

文章概要 本文詳細介紹 Pandas 的性能優化技術,包括: 內存優化計算優化大數據處理實際應用示例 內存優化 數據類型優化 # 查看數據類型 df.dtypes# 查看內存使用情況 df.memory_usage(deepTrue)# 優化數值類型 # 將 float64 轉換為 float32 df[floa…

c++系列之智能指針的使用

💗 💗 博客:小怡同學 💗 💗 個人簡介:編程小萌新 💗 💗 如果博客對大家有用的話,請點贊關注再收藏 🌞 智能指針的使用及原理 AII(Resource Acquisition Is Initializatio…

知識蒸餾(Knowledge Distillation, KD)

知識蒸餾(Knowledge Distillation, KD)是一種模型壓縮與知識遷移技術,通過讓小型學生模型(Student)模仿大型教師模型(Teacher)的行為(如輸出概率分布或中間特征表示)&…

chatGPT 會擴大失業潮嗎?

擊上方關注 “終端研發部” 設為“星標”,和你一起掌握更多數據庫知識 對于部分人而言,失業是必然趨勢。 這不,身后的一測試大哥,自從公司解散之后,已經在家待業半年了。。。 自打OpenAI推出了chatGPT3.0之后&#xff…

FPGA基礎 -- Verilog行為級建模之時序控制

Verilog 行為級建模(Behavioral Modeling)中“時序控制”機制的系統化由淺入深培訓內容,適用于初學者到進階 FPGA 設計工程師的學習路徑。 🎯 一、行為級建模的定位 行為級建模(Behavioral Modeling)是 Ve…

設計模式精講 Day 7:橋接模式(Bridge Pattern)

【設計模式精講 Day 7】橋接模式(Bridge Pattern) 文章簡述 在軟件系統中,類的繼承關系往往會導致類爆炸,尤其是在需要組合多種功能或行為時。橋接模式(Bridge Pattern)通過將抽象部分與其實現部分分離&am…

Apipost 簽約銳捷網絡:AI賦能,共推 ICT 領域 API 生態智能化升級

日前,北京北極狐信息科技有限公司(簡稱 “北極狐科技”)與銳捷網絡股份有限公司(簡稱 “銳捷網絡”)正式簽署合作協議,雙方將聚焦 ICT 基礎設施及解決方案領域,圍繞 API 全鏈路管理與智能化研發…

RK3568筆記八十三:RTMP推流H264和PCM

若該文為原創文章,轉載請注明原文出處。 前面有通過勇哥,實現了RTMP推流,但一直想加上音頻,所以經過測試,寫了一個demo, ffmpeg是使用ubuntu下安裝測試的。 安裝參考:Ubuntu20.4下x264、x265、fdk-aac和FFmpeg4.3源碼編譯安裝_ubuntu安裝libx264-CSDN博客 記錄:實現從…

產業園智慧化升級中 DDC 樓宇自控系統的集成應用優勢:多業態協同與能源可視化管控?

摘要? 在產業園智慧化升級浪潮中,直接數字控制(DDC)系統憑借強大的集成能力,成為實現多業態協同與能源可視化管控的核心技術。本文深入剖析 DDC 系統在整合園區多元業態、優化能源管理方面的獨特優勢,通過系統集成打…

Vue 3瀑布流組件實現詳解 - 圖片展示方案

引言:瀑布流布局的魅力與應用場景 在當今富媒體內容主導的網絡環境中,瀑布流布局已成為展示圖片商品等內容的流行方式。它通過動態布局算法在有限空間內最大化內容展示,提供視覺連續性和流暢瀏覽體驗。本文將深入探討如何使用Vue 3實現一個功…

如何確保郵件內容符合反垃圾郵件規范?

一、遵守相關法規 美國《CAN-SPAM法案》規定,郵件頭信息必須真實準確,要標明廣告性質、提供有效地址,并在 10 個工作日內響應退訂請求。 歐盟《通用數據保護條例》(GDPR)強調獲得用戶明確同意,數據使用要…

MQ解決高并發下訂單問題,實現流量削峰

文章目錄 示例:電商秒殺系統中的流量削峰1. 依賴引入(Maven)2. 消息隊列配置(RabbitMQ)3. 生產者:訂單服務(接收高并發請求)4. 消費者:庫存服務(按系統容量處…

【二進制安全作業】250616課上作業2 - 棧溢出漏洞利用

文章目錄 前言一、使用環境二、程序源碼1. C語言源碼2. 編譯方式 三、源碼分析四、反匯編分析1. 檢查文件安全性2. 查找目標函數3. 計算偏移量4. 繞過 strlen5. 繞過 if 五、編寫EXP結語 前言 直接進入正題 一、使用環境 處理器架構:x86_64 操作系統:U…

Python類型處理與推導式

歡迎來到啾啾的博客🐱。 記錄學習點滴。分享工作思考和實用技巧,偶爾也分享一些雜談💬。 有很多很多不足的地方,歡迎評論交流,感謝您的閱讀和評論😄。 目錄 1 引言2 類型處理3 高效操作AI開發常見數據結構3…

數據庫char字段做trim之后查詢很慢的解決方式

select * from TABLE0 where trim(column1):param 當表數據量大時,即使給column1字段加上索引,這條查詢語句也會很慢。 因為使用trim函數后,column1的索引會失效,有兩種處理方法: 1.給表加上trim(column1)函數索引 …

Kafka核心架構解析:從CAP理論到消息可靠性的設計哲學

摘要 本文從分布式系統CAP理論和消息可靠性兩個視角深入解析Kafka的架構設計,通過概念關系圖和組件交互圖揭示其核心設計思想,并詳細拆解各組件功能與協作機制。文章包含完整的交互流程分析和配置參數說明,是理解Kafka設計精髓的實用指南。 一…