当前位置: 首页 > 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.xdnf.cn/news/1402543.html

相关文章:

  • 【系统分析师】高分论文:论系统测试技术及应用
  • IAR工程如何搭建vscode+clangd编辑环境
  • day42-Ansible
  • “人工智能+”行动重磅发布!ElfBoard助力嵌入式教育智能化升级
  • 【Java】常见数据结构及方法
  • EVidenceModeler v2.1 安装与使用--生信工具58
  • 嵌入式开发学习 C++:day02
  • mysql(自写)
  • 10. 函数和匿名函数(二)
  • 数值分析——误差的来源与分类、误差的基本概念(绝对误差、相对误差、有效数字)
  • 国标调查:引领汽车消费市场健康发展的理性指南
  • 奥普新汽车声学测试方案书
  • 基于单片机温控风扇ds18b20系统Proteus仿真(含全部资料)
  • 矿物类型分类实战:从数据预处理到多模型对比
  • 计算机体系结构之流水线与指令级并行
  • 离线大文件与断点续传:ABP + TUS + MinIO/S3
  • Android FrameWork - 开机启动 SystemServer 进程
  • Science:机器学习模型进行遗传变异外显率预测
  • 项目管理的关键成功因素
  • 全栈开源,高效赋能——启英泰伦新官网升级上线!
  • 链表(1)
  • 继电器的作用、选型和测量-超简单解读
  • Preprocessing Model in MPC 3 - 基于同态加密的协议 - Over Rings 环
  • Rust 泛型:抽象与性能的完美融合(零成本抽象的终极指南)
  • 20250830_Oracle 19c CDB+PDB(QMS)默认表空间、临时表空间、归档日志、闪回恢复区巡检手册
  • 【MLLM】从BLIP3o到BLIP3o-NEXT:统一生成与理解
  • Elasticsearch logsdb 索引模式和 TSDS 的业务影响
  • WSL使用指南
  • STM32 之BMP280的应用--基于RTOS的环境
  • 【MLLM】多模态理解Ovis2.5模型架构和训练流程