
一、什么是分布式事务单体项目中所有业务操作共用一个数据库依靠数据库本地事务ACID就能保证数据一致性。但微服务集群架构下存在两大拆分服务拆分下单、库存、支付、订单分属不同微服务数据源拆分每个微服务独立数据库跨服务操作会跨越多个数据源。此时单次完整业务由多个服务的本地事务共同组成每一个服务的本地事务称为分支事务整体业务称为全局事务。分布式事务核心目标保证所有分支事务同时全部提交或同时全部回滚不出现部分成功、部分失败的数据不一致问题。二、Seata 核心三大组件Seata 是阿里开源的分布式事务中间件提供四种事务模式统一解决分布式一致性问题架构分为三大核心角色TCTransaction Coordinator事务协调器全局事务管理者独立部署服务。 职责记录全局事务与所有分支事务状态二阶段统一通知所有分支提交 / 回滚。TMTransaction Manager事务管理器业务发起方嵌入业务服务。 职责开启全局事务、向 TC 注册全局事务、业务执行完成后通知 TC 提交 / 回滚全局事务。RMResource Manager资源管理器每个微服务数据库的代理每个分支服务都包含 RM。 职责向 TC 注册分支事务执行本地 SQL上报分支执行状态接收 TC 二阶段指令执行本地提交 / 回滚。三、Seata 四大事务模式详解3.1 XA 模式强一致性标准两阶段提交XA 是数据库原生支持的分布式事务规范分为一阶段准备、二阶段确认两阶段流程一阶段Prepare 准备RM 向 TC 注册当前分支事务RM 执行业务 SQL执行完成后不提交本地事务数据库资源锁持续持有RM 将分支执行状态上报 TC。二阶段Commit/RollbackTC 汇总所有分支事务状态分两种情况全部分支执行成功TC 下发提交指令所有 RM 提交本地事务释放数据库锁任意分支执行失败TC 下发回滚指令所有 RM 回滚本地事务释放数据库锁。XA 优缺点优点强数据一致性无脏写、脏读依托数据库原生能力缺点一阶段长期持有数据库行锁高并发场景下锁竞争严重性能较差。3.2 AT 模式自动事务Seata 主推无侵入AT 是 Seata 自研模式基于 XA 两阶段思想优化自动生成回滚日志业务代码无侵入是企业最常用方案。 核心依赖两张业务库数据表undo_log回滚快照表、lock_table全局锁表。一阶段执行业务提前提交本地事务RM 向 TC 注册分支事务执行业务增删改 SQL执行前查询数据生成数据快照写入 undo_log直接提交本地事务立刻释放数据库行锁在lock_table写入全局锁记录全局事务 ID、表名、数据主键上报分支状态给 TC。二阶段TC 汇总所有分支状态分两种处理逻辑全局事务提交TC 通知 RMRM 直接删除undo_log快照数据无需操作业务表全局事务回滚TC 通知 RMRM 查询undo_log中的前置数据快照反向执行 SQL 恢复原始数据完成回滚后删除快照与全局锁记录。AT 原生缺陷脏写问题AT 一阶段执行完 SQL 就提交本地事务、释放 DB 锁。 此时全局事务未结束其他并发事务可以修改同一条数据造成脏写破坏数据隔离性。解决方案全局锁机制依靠lock_table实现全局排他锁解决脏写TC 通过lock_table记录每条数据当前持有全局锁的事务 ID其他事务修改同一条数据前必须先获取全局锁若数据已被全局锁占用则阻塞等待全局锁设置超时时间若等待超时当前事务释放本地数据库锁避免死锁原全局事务完成回滚 / 提交后自动释放全局锁。AT 使用前置条件Seata 配置文件中transaction-mode设置为AT所有参与分布式事务的业务库手动创建undo_log回滚表与lock_table全局锁表业务方法添加GlobalTransactional注解开启全局事务。AT 优缺点优点业务零代码侵入自动生成回滚日志一阶段释放 DB 锁并发性能远优于 XA缺点存在隔离性问题依赖全局锁解决脏写需额外维护两张数据表。3.3 TCC 模式侵入式补偿无数据库锁TCC 全称 Try-Confirm-Cancel分为三段手动编写业务代码完全脱离数据库事务无锁设计。Try预留资源检查业务参数锁定 / 预留业务资源库存冻结、金额冻结执行本地独立操作Confirm确认提交全局事务所有分支 Try 全部成功后执行真正扣减 / 扣划预留资源Cancel回滚补偿任意分支 Try 失败则全部执行释放预留资源补偿还原业务数据。TCC 优缺点优点不依赖数据库事务无长锁阻塞高性能适配无事务的中间件Redis、第三方支付接口缺点代码侵入极强每个业务接口都需要手动编写三段逻辑开发维护成本高需要自行处理幂等、空回滚、悬挂问题。3.4 Saga 模式长事务补偿无锁Saga 专为长流程分布式事务设计流程简单一阶段直接提交本地事务失败后执行补偿代码无任何锁机制。执行流程一阶段每个分支直接执行业务逻辑提交本地数据库事务不预留资源二阶段全局事务全部执行成功无需任何操作任意分支执行失败逆序执行前面所有成功分支的补偿接口反向撤销已提交的业务数据。Saga 优缺点优点无数据库锁、无全局锁并发性能最好适合跨系统长事务流程订单履约、供应链流程缺点隔离性最弱全程无锁并发场景会出现脏读业务需要手动编写补偿逻辑存在代码侵入补偿逻辑编写复杂容易出现补偿失败的数据不一致问题。