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

分布式事务方案:Seata XA、AT、TCC 与 MQ

只要一个业务操作同时写多个服务的数据,就会遇到分布式事务问题。比如下单要写订单、扣库存、扣余额,任意一步失败都可能造成数据不一致。

一句话概括:Seata 通过 TC、TM、RM 协调全局事务和分支事务;XA 追求强一致但性能差,AT 通过 undo log 提升性能,TCC 通过业务代码完成 Try/Confirm/Cancel,MQ 通过异步消息实现最终一致。

用户发起业务请求

TM 开启全局事务

调用多个微服务

RM 注册分支事务

执行各自本地事务

向 TC 报告分支状态

所有分支是否成功

TC 通知提交

TC 通知回滚

Seata 三个角色

角色全称作用
TCTransaction Coordinator事务协调者,维护全局事务和分支事务状态
TMTransaction Manager事务管理器,定义全局事务范围,发起提交或回滚
RMResource Manager资源管理器,管理分支事务资源,注册和汇报分支状态

可以这样理解:

  • TM 是发起人。
  • RM 是各个服务里的执行者。
  • TC 是总协调者。

XA 模式

XA 是强一致思路,偏 CP。

全部成功

有失败

一阶段

RM 注册分支事务

执行业务 SQL
但不提交

报告执行状态给 TC

TC 检查所有分支

二阶段通知提交

二阶段通知回滚

RM 提交本地事务

RM 回滚本地事务

优点是强一致,缺点是资源锁定周期长,性能较差。适合对一致性要求极高的场景。

AT 模式

AT 也是两阶段模型,但一阶段会直接提交本地事务,并记录undo log

流程:

  1. RM 注册分支事务。
  2. 记录更新前后的数据快照,也就是undo log
  3. 执行业务 SQL 并提交。
  4. 报告事务状态给 TC。
  5. 二阶段提交时删除undo log
  6. 二阶段回滚时根据undo log恢复数据。

AT 相比 XA,资源锁定时间更短,性能更好,适合很多互联网业务。

AT 模式里有两个容易被问深的点:undo log和全局锁。

机制作用
undo log保存修改前后的数据快照,二阶段回滚时用来恢复数据
全局锁防止多个全局事务同时修改同一行数据,避免回滚时数据被别人改乱

AT 回滚大概是这样:

提交

回滚

一阶段执行业务 SQL

记录 before image
修改前快照

记录 after image
修改后快照

提交本地事务

全局事务结果

删除 undo log

校验当前数据
是否等于 after image

数据是否被脏写

用 before image
恢复数据

需要人工处理或重试

所以 AT 不是“魔法回滚”,它依赖快照、全局锁和数据校验。这个点讲出来,分布式事务的回答会厚很多。

TCC 模式

TCC 需要业务自己实现三个阶段:

阶段含义
Try检查并预留资源
Confirm真正完成资源操作
Cancel释放预留资源,是 Try 的反向操作

TCC 性能较好,但开发成本高。因为每个业务都要写 Try、Confirm、Cancel,还要处理幂等、空回滚、悬挂等问题。

TCC 里这三个坑尤其要记:

问题含义处理思路
幂等Confirm 或 Cancel 可能被重复调用用事务状态表或唯一业务号防重复
空回滚Try 没执行成功,Cancel 却被调用Cancel 里先判断是否有 Try 记录
悬挂Cancel 先到,Try 后到Try 执行前检查是否已经 Cancel

简单说:TCC 性能好,但不是加三个方法名就完了。它把一致性控制更多交给业务代码,所以业务状态表、幂等控制和异常分支处理都要自己设计。

MQ 最终一致

MQ 方案通常用于最终一致场景。

比如借款业务:

  1. 支付宝服务审核通过。
  2. 本地事务里生成借款单。
  3. 同一个事务内发送 MQ 消息。
  4. 借呗服务消费消息。
  5. 借呗服务执行自己的本地事务。
  6. 消费失败时重试或进入补偿流程。

MQ 方式性能最好,但不是强一致,它依赖消息可靠投递、消费幂等和补偿机制。

方案怎么选

方案一致性性能开发成本适合场景
XA强一致较差较低银行、资金强一致
AT最终一致倾向较好较低常见互联网业务
TCC最终一致倾向较好复杂业务资源预留
MQ最终一致最好中等异步解耦、通知、跨服务写

面试回答模板

可以这样答:

我们项目中只要涉及多个服务之间的写操作,就要考虑分布式事务。Seata 里有三个角色:TC 是事务协调者,维护全局事务和分支事务状态;TM 负责开启、提交或回滚全局事务;RM 管理分支事务资源,并向 TC 注册和汇报状态。Seata 有 XA、AT、TCC 等模式。XA 是强一致,两阶段中一阶段执行 SQL 但不提交,二阶段统一提交或回滚,性能较差。AT 模式一阶段提交本地事务并记录 undo log,回滚时用 undo log 恢复,性能更好。TCC 需要业务实现 Try、Confirm、Cancel。MQ 方案是异步最终一致,性能最好,但要保证消息可靠和消费幂等。

小结

分布式事务不要只背方案名。

先问业务需要什么:强一致、最终一致、性能、开发成本、失败补偿能力。把这个取舍讲清楚,方案选择才站得住。

http://www.cnnetsun.cn/news/2544764.html

相关文章:

  • 为什么头部AI团队已在灰度接入V3?——基于17个企业级LLM应用的兼容性压力测试报告
  • Keil C51中利用LX51链接器实现固件校验和计算
  • Python安全自动化:构建可落地的渗透测试工作流
  • 029、PCB封装库创建与管理
  • DeepSeek告警配置踩坑实录:87%团队忽略的时序对齐偏差、标签继承断层与Webhook幂等性漏洞
  • ChatGPT自定义指令设置速成课:15分钟完成角色+约束+格式三重固化,已验证于金融/医疗/法务三大合规场景
  • 如何快速将B站m4s缓存转换为MP4:3步搞定视频格式转换难题
  • ViGEmBus虚拟游戏控制器驱动:Windows游戏外设兼容性终极解决方案
  • 10分钟掌握QModMaster:开源ModBus调试工具终极解决方案
  • Gemini KYC合规沙盒实战(仅限首批200家持牌机构开放):如何用3步完成eIDAS 2.0兼容性认证与审计留痕闭环
  • Node.js 服务端应用无缝接入 TaoToken 多模型 API 的配置详解
  • 030、PCB封装设计规范与3D模型导入
  • [实战] 2026年CNC加工质量管理:从数字化图纸识别到自动化检验计划(FAI)全流程
  • 机器学习与重要性采样融合:高效估计黑盒模型尾部风险
  • 机器学习中的不确定性原理:模型优化与误差评估的根本权衡
  • Hotkey Detective:3分钟解决Windows热键冲突的终极免费工具
  • Zotero Duplicates Merger:终极文献去重解决方案,告别重复文献困扰
  • 通过TaotokenCLI工具一键配置多开发环境下的API访问密钥
  • Dlib Windows预编译包:3分钟搞定Python人脸识别环境搭建的终极指南
  • Charles抓包+Frida Hook破解Android签名反爬实战
  • Enigma Virtual Box终极解包指南:快速掌握evbunpack完整解决方案
  • 如何快速掌握开源无人机数据处理工具:5步生成专业级三维模型与正射影像
  • Windows右键菜单终极清理指南:3分钟打造高效工作流
  • 终极指南:如何用 LiteIDE 简单快速上手 Go 语言开发
  • 5大核心优势:Play Integrity API Checker如何构建坚不可摧的Android应用安全防线
  • Fast-GitHub终极加速指南:告别龟速访问,实现10倍下载速度
  • ComfyUI-Impact-Pack:3步实现AI图像智能修复与细节增强
  • DeepSeek v3升级后成本激增41%?紧急发布:兼容性迁移成本对冲清单(含6个可立即执行的config开关)
  • 小白也能秒懂的B站视频下载神器:BilibiliDown完全指南
  • 紧急预警:微信即将上线AI内容标识系统!ChatGPT运营者必须在72小时内完成的3项合规改造