当前位置: 首页 > news >正文

介绍分布式事务之Seata

简介

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式事务解决方案。

🚀 一、Seata 的四种主要模式

Seata 提供的分布式事务解决方案有:

  1. AT 模式(Automatic Transaction,默认模式)
  2. TCC 模式(Try-Confirm-Cancel)
  3. SAGA 模式(长事务补偿型)
  4. XA 模式(基于数据库 XA 协议)

下面我逐一拆解:


1️⃣ AT 模式(自动事务模式)

🔹 原理

  • 基于 本地事务 + Undo Log 实现,两阶段提交。
  • 阶段一:执行业务 SQL,生成 前后镜像,并写入 undo log
  • 阶段二:根据全局事务结果来 提交(删除 undo log)回滚(利用 undo log 恢复数据)

🔹 举例

下单 → 扣库存 → 扣余额。

  • 阶段一:库存 stock=100 → 99,undo log 记录 before=100, after=99
  • 阶段二:若失败,回滚时用 undo log 恢复 stock=100

🔹 特点

✅ 优点:透明、接入简单、开发成本低(像本地事务一样写 SQL)。
❌ 缺点:只支持 关系型数据库,性能依赖 undo log。

👉 应用场景
适合 大多数互联网电商/订单类系统,数据一致性要求较高,且数据库是关系型的。


2️⃣ TCC 模式(Try-Confirm-Cancel)

🔹 原理

  • 应用层显式定义两阶段逻辑
  • Try:资源预留。
  • Confirm:业务确认。
  • Cancel:业务回滚。

🔹 举例

转账:从 A → B 转 100。

  • Try 阶段:冻结 A 的 100 元。
  • Confirm 阶段:扣除冻结金额,B 账户加 100。
  • Cancel 阶段:解冻 A 的 100 元(回滚)。

🔹 特点

✅ 优点:性能高,灵活,能处理 非数据库资源(比如调用第三方服务)。
❌ 缺点:开发成本高,需要写三套逻辑(Try、Confirm、Cancel)。

👉 应用场景
适合 金融交易、积分兑换、优惠券发放 等对资源预留要求高的场景。


3️⃣ SAGA 模式(长事务补偿型)

🔹 原理

  • 长事务分解为一系列本地事务
  • 每个本地事务都必须提供 正向操作(Action)补偿操作(Compensation)
  • 如果中途失败,通过补偿操作逆向回滚。

🔹 举例

机票 + 酒店 + 租车 预订:

  • Action:订机票成功 → 订酒店成功 → 订租车成功。
  • 如果订租车失败 → 执行补偿:取消酒店 → 取消机票。

🔹 特点

✅ 优点:适合 长事务,执行时间长、跨多个系统
❌ 缺点:补偿操作可能很复杂,而且补偿不一定能保证完全幂等。

👉 应用场景
适合 旅游预订、电商大促销活动、大批量异步任务 等。


4️⃣ XA 模式(基于数据库 XA 协议)

🔹 原理

  • 基于数据库 XA 协议 实现两阶段提交。
  • 阶段一:RM 向数据库发送 prepare,数据库执行事务但不提交。
  • 阶段二:根据全局事务结果,发送 commitrollback

🔹 举例

A 数据库转账 → B 数据库:

  • 阶段一:A/B 数据库都 prepare
  • 阶段二:都 commit,或者都 rollback

🔹 特点

✅ 优点:强一致性,数据库级别保证。
❌ 缺点:性能低,依赖数据库的 XA 支持,锁的粒度较大。

👉 应用场景
适合 对强一致性要求极高的金融场景,但性能瓶颈较明显。


🚀 二、四种模式对比

模式一致性性能适用场景开发成本
AT强一致电商、订单、支付低(透明接入)
TCC强一致最高金融交易、库存冻结高(需写3套逻辑)
SAGA最终一致旅游预订、大促销、长事务中(需写补偿)
XA强一致银行、证券低(依赖数据库)

🚀 三、总结(通俗理解)

  • AT 模式:像“写日记”,每次改动前后都记下来,出错就翻回去。
  • TCC 模式:像“预定房间”,先 Try 预留,确认后付款,不要就取消。
  • SAGA 模式:像“旅游订票”,一步步订票,如果最后失败,就退票。
  • XA 模式:像“银行转账”,两个银行同时锁定账户,确认后一起提交。

1️⃣ AT 模式 (自动补偿)

提交
回滚
业务SQL执行
记录Undo Log: 前后镜像
全局事务结果
删除Undo Log
根据Undo Log恢复数据

2️⃣ TCC 模式 (Try-Confirm-Cancel)

成功
失败
发起请求
Try: 预留资源
事务结果
Confirm: 确认执行
Cancel: 取消预留

3️⃣ SAGA 模式 (长事务补偿)

成功
失败
Action1: 订机票
Action2: 订酒店
Action3: 订租车
是否成功?
事务完成
触发补偿
Compensate2: 取消酒店
Compensate1: 取消机票

4️⃣ XA 模式 (两阶段提交)

全部ok
有失败
TM协调者
RM1: prepare
RM2: prepare
收集结果
commit 所有分支
rollback 所有分支
http://www.dtcms.com/a/359073.html

相关文章:

  • NV032NV037美光固态闪存NV043NV045
  • C++世界的大门——基础知识总结
  • 银河麒麟系统无法打开360浏览器的解决办法以及安装initramfs-tools报错解决方案
  • “HEU-AUTO”无线上网使用指南
  • 【开题答辩全过程】以 基于springboot的户外越野活动管理系统为例,包含答辩的问题和答案
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(上)
  • Python 数据分析:计算,分组统计2,df.groupby()和grouped.agg()。听故事学知识点怎么这么容易?
  • 大模型推理显卡对比:Tesla P40 vs Titan RTX vs RTX A3000
  • GaussDB生产扩容引起的PANIC问题处理案例
  • 重叠IO模型
  • MySQL基础理解入门
  • 微服务架构中的 “双保险“:服务保护与分布式事务解决方案实战
  • 执行一条Select语句流程
  • Linux从入门到进阶--第四章--Linux使用操作
  • 深度学习核心损失函数详解:交叉熵、MSE、对比学习(InfoNCE)
  • Linux中的Shell编程 第一章
  • TechPowerUp GPU-Z中文版:专业显卡检测工具
  • 分分合合,门模块方案又兴起了
  • 架构进阶——解读 69页 方法轮IT规划培训 架构-重点-细节【附全文阅读】
  • FFmpeg音视频处理解决方案
  • 互联网大厂面试:大模型应用开发岗位核心技术点解析
  • CSS基础学习第二天
  • 算法之x数之和
  • nginx配置websock请求,wss
  • GooglePlay提审问题记录
  • 生成式BI工具(WrenAI)
  • 防抖与节流的区别及实现【JS核心】
  • 恶补DSP:3.F28335的ePWM模块
  • 语义分割目前还是研究热点吗?
  • 【CF】Day136——Codeforces Round 1046 (Div. 2) CD (动态规划 | 数学)