分布式事物

好的,分布式事务是分布式系统中的核心难点之一,XA、AT(Auto Transaction)和TCC(Try-Confirm-Cancel)是三种常见的解决方案。以下是它们的原理和流程对比:


一、 XA 事务(两阶段提交协议)

适用场景:传统数据库层的强一致性事务,依赖数据库原生支持(如MySQL XA协议)。

原理

两阶段提交(2PC)

  1. Prepare Phase(准备阶段)
    ◦ 事务管理器(TM)向所有参与者(资源管理器,RM)发送"预提交"请求。
    ◦ 参与者执行事务操作,记录undo/redo日志,锁定资源,返回"就绪"或"失败"。
  2. Commit Phase(提交阶段)
    ◦ 若所有参与者返回"就绪",TM发送"提交"命令,参与者持久化数据并释放锁。
    ◦ 若任一参与者返回"失败",TM发送"回滚"命令,参与者撤销操作。
流程示例
plaintext 复制代码
TM → RM1: Prepare
TM → RM2: Prepare
RM1 → TM: Ready
RM2 → TM: Ready
TM → RM1: Commit
TM → RM2: Commit
优缺点

优点 :强一致性,数据库原生支持。

缺点

• 性能差(同步阻塞、锁竞争)。

• 单点故障(TM宕机可能导致资源长期锁定)。

• 不适用于高并发或长事务场景。


二、 AT 事务(自动补偿型)

适用场景:Seata框架提出的模式,适用于微服务架构,通过本地事务+全局锁实现弱侵入性。

原理

核心机制

  1. 全局锁:在业务表上记录全局锁,防止其他事务修改相同数据。
  2. 本地事务:每个分支事务提交时自动生成回滚日志(undo log)。
  3. 补偿机制:若事务失败,通过undo log回滚数据。
流程
  1. 阶段一(提交)
    • 业务SQL执行前,记录数据快照(undo log)。
    • 执行业务SQL,提交本地事务,释放本地锁(但保留全局锁)。
  2. 阶段二(提交/回滚)
    • 若全局事务成功,异步删除undo log。
    • 若全局事务失败,根据undo log生成反向SQL补偿数据。
优缺点

优点

• 无侵入性(仅需代理数据源)。

• 性能优于XA(无全局锁等待)。

缺点

• 全局锁可能引发脏写(需业务隔离级别支持)。

• 无法处理非SQL操作(如Redis、MQ)。


三、 TCC 事务(补偿型)

适用场景:需要业务高度可控的场景(如金融交易),通过业务代码实现补偿逻辑。

原理

三阶段模型

  1. Try 阶段:预留资源(如冻结账户余额),记录中间状态。
  2. Confirm 阶段:提交事务,确认资源操作(如扣减冻结金额)。
  3. Cancel 阶段:回滚事务,释放预留资源(如解冻金额)。
流程示例
plaintext 复制代码
订单服务 → Try: 创建订单(状态:待确认)
库存服务 → Try: 冻结库存(库存数-1,冻结数+1)

-- 若所有Try成功 --
订单服务 → Confirm: 订单状态改为"已确认"
库存服务 → Confirm: 冻结库存数-1,实际库存数不变

-- 若任一Try失败 --
订单服务 → Cancel: 删除订单
库存服务 → Cancel: 库存数+1,冻结数-1
关键要求

幂等性 :Confirm/Cancel需支持重复调用。

防悬挂:需处理Try成功但未收到Confirm/Cancel的场景(如超时控制)。

优缺点

优点

• 灵活性高,可处理非SQL操作。

• 性能较好(无全局锁)。

缺点

• 业务侵入性强(需实现Try/Confirm/Cancel接口)。

• 开发复杂度高(需处理所有异常分支)。


四、 对比总结

方案 一致性 性能 侵入性 适用场景
XA 强一致 传统数据库事务
AT 最终一致 微服务+SQL场景
TCC 最终一致 金融等高可靠性业务

五、 选型建议

  1. XA:适合强一致性的简单事务(如跨库转账),但对性能要求不高。
  2. AT:适合微服务架构下的SQL操作(如电商下单),平衡性能与侵入性。
  3. TCC:适合复杂业务(如支付、库存扣减),需精细化控制补偿逻辑。

通过结合业务需求(一致性、性能、开发成本)选择合适方案,必要时可混合使用(如TCC+AT)。

相关推荐
程序猿阿伟1 小时前
《分布式软总线牵手云服务,拓展应用新维度》
分布式
掘金-我是哪吒4 小时前
分布式微服务系统架构第102集:JVM调优支撑高并发、低延迟、高稳定性场景
jvm·分布式·微服务·架构·系统架构
不要不开心了5 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
java1234_小锋5 小时前
Zookeeper的典型应用场景?
分布式·zookeeper·云原生
乌旭6 小时前
从Ampere到Hopper:GPU架构演进对AI模型训练的颠覆性影响
人工智能·pytorch·分布式·深度学习·机器学习·ai·gpu算力
魔道不误砍柴功6 小时前
SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
分布式·spring·spring cloud
群联云防护小杜7 小时前
隐藏源站IP与SD-WAN回源优化:高防架构的核心实践
网络·分布式·网络协议·tcp/ip·安全·架构·ddos
码见愁7 小时前
Git分布式版本控制工具
分布式·git
IT成长日记8 小时前
Hadoop文件操作指南:深入解析文件操作
大数据·hadoop·分布式
邪恶的贝利亚8 小时前
从红黑树到哈希表:原理对比与典型场景应用解析(分布式以及布隆过滤器)
数据结构·分布式·散列表