目录一、Seata 是什么二、核心架构三大角色所有模式通用三、四大事务模式核心怎么解决分布式事务1. AT 模式Automatic Transaction最常用、无侵入2. TCC 模式Try-Confirm-Cancel高性能、高侵入3. Saga 模式长事务、最终一致、无锁4. XA 模式数据库原生强一致、性能差四、AT 模式深度拆解最核心1. 全局锁机制解决隔离性2. 回滚流程保证原子性3. 与传统 2PC 的区别性能关键五、模式对比与选型六、快速落地Spring Boot AT 模式1. 依赖2. 配置application.yml3. 业务代码零侵入4. 初始化 undo_log七、总结Seata 怎么解决分布式事务一、Seata 是什么SeataSimple Extensible Autonomous Transaction Architecture是阿里开源、现捐给 Apache 的一站式分布式事务解决方案目标是让微服务下的分布式事务像本地事务一样简单易用。它要解决的核心问题跨库 / 跨服务的多个操作要么全成功要么全回滚原子性并保证数据一致性。二、核心架构三大角色所有模式通用Seata 把分布式事务抽象成三个角色协同完成两阶段提交2PCTCTransaction Coordinator事务协调器独立部署的 Seata Server集群保证高可用职责全局事务的 “大脑”生成全局唯一事务号XID维护全局 / 分支事务状态驱动全局提交或回滚TMTransaction Manager事务管理器部署在业务发起方如订单服务职责定义全局事务边界开启全局事务向 TC 要 XID提交 / 回滚全局事务RMResource Manager资源管理器部署在每个参与事务的微服务库存 / 账户 / 订单服务职责管理本地资源响应 TC 指令注册分支事务到 TC执行本地事务、生成回滚日志按 TC 指令提交 / 回滚分支标准流程所有模式通用TM 向 TC 申请开启全局事务 → TC 生成XID返回XID 在服务调用链路上透传每个 RM 收到 XID向 TC 注册分支事务TM 决议全局提交或回滚TC 通知所有 RM提交 / 回滚分支事务三、四大事务模式核心怎么解决分布式事务Seata 提供AT、TCC、Saga、XA四种模式覆盖从强一致→最终一致、低侵入→高灵活的全场景。1. AT 模式Automatic Transaction最常用、无侵入定位基于本地事务 自动回滚日志的增强版 2PC业务代码零侵入强一致全局锁隔离。原理两阶段提交核心是 undo_log 全局锁一阶段Prepare 本地提交RM 拦截业务 SQL如 update生成before_image修改前数据和after_image修改后数据在同一个本地事务里执行业务 SQL 插入 undo_log回滚日志提交本地事务释放本地锁和连接关键提交前必须先拿到全局锁防止其他事务改同一条数据二阶段Commit/Rollback全局提交TC 通知 RM → RM异步删除 undo_log极快全局回滚TC 通知 RM → RM 根据 undo_log 生成反向 SQL恢复数据到 before_image 状态核心表undo_log自动创建CREATE TABLE undo_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, xid VARCHAR(100) NOT NULL, -- 全局事务ID branch_id BIGINT NOT NULL, -- 分支事务ID rollback_info LONGBLOB NOT NULL, -- 回滚日志before_image log_status INT NOT NULL, -- 状态0正常1已回滚 log_created DATETIME NOT NULL, log_modified DATETIME NOT NULL, UNIQUE KEY ux_undo_log (xid, branch_id) );优点无侵入、强一致、性能较好一阶段提交本地事务缺点依赖关系型数据库、全局锁可能导致冲突、有少量性能损耗适用90% 微服务场景电商下单、库存扣减、订单创建2. TCC 模式Try-Confirm-Cancel高性能、高侵入定位业务层手动实现的 2PC无全局锁性能最高但代码侵入强。原理三阶段完全由业务代码控制Try一阶段资源检查 预留检查业务合法性如库存是否充足预留资源如冻结库存、冻结金额不真正扣减只 “占坑”Confirm二阶段确认提交真正执行业务操作扣减冻结库存、扣减冻结金额必须幂等防止重复调用Cancel二阶段取消回滚释放预留资源解冻库存、解冻金额必须幂等、防空回滚示例库存服务// Try冻结库存 public boolean tryDeduct(Long goodsId, int count); // Confirm确认扣减 public boolean confirmDeduct(Long goodsId, int count); // Cancel解冻库存 public boolean cancelDeduct(Long goodsId, int count);优点无全局锁、高性能、灵活控制资源缺点侵入极强写 3 倍代码、需处理幂等 / 空回滚 / 悬挂适用高并发、对性能敏感场景支付扣款、账户冻结、红包发放3. Saga 模式长事务、最终一致、无锁定位长周期分布式事务拆分为本地子事务无锁、异步化、最终一致。原理正向执行 补偿事务状态机驱动将全局事务拆成一串本地子事务T1→T2→T3→…→Tn每个子事务有对应的补偿事务C1→C2→C3→…→Cn执行规则正向依次执行 T1、T2、T3…若全部成功正常结束若 T3 失败反向执行补偿 C2、C1回滚已提交的 T2、T1两种实现状态机模式推荐Seata 内置状态机引擎配置化定义流程与补偿低侵入编排模式基于消息队列 / 定时任务完全异步适合跨系统长流程优点无锁、支持长事务、异步化、跨技术栈缺点最终一致中间态不一致、补偿逻辑复杂、无隔离适用长周期、跨系统、异步流程订单→支付→物流→出库→短信通知4. XA 模式数据库原生强一致、性能差定位标准X/Open XA 协议实现强一致、无侵入、性能低。原理数据库原生 2PC一阶段PrepareRM 执行 SQL但不提交本地事务只锁资源向 TC 报告 OK二阶段Commit/Rollback全部分支 Prepare OK → TC 指令 Commit → RM 提交本地事务释放锁任一分支失败 → TC 指令 Rollback → RM 回滚本地事务释放锁优点强一致、无侵入、数据库原生支持缺点性能极低一阶段锁资源直到二阶段、长锁风险、依赖 XA 数据库适用强一致要求极高、并发低场景金融核心、账务系统四、AT 模式深度拆解最核心1. 全局锁机制解决隔离性一阶段提交前RM 必须先拿到该记录的全局锁全局锁存在 TCRedis/DB 存储拿不到锁 → 等待超时回滚→ 避免脏写示例事务 A 扣减库存事务 B 同时扣减同库存 → B 阻塞直到 A 提交 / 回滚2. 回滚流程保证原子性全局事务失败 → TC 通知所有 RM 回滚RM 收到回滚指令 → 读取 undo_log 的 before_image生成反向 SQL如 UPDATE stock SET count100 WHERE id1执行反向 SQL → 恢复数据删除 undo_log → 回滚完成3. 与传统 2PC 的区别性能关键传统 2PC一阶段不提交锁资源直到二阶段 →长锁、性能差Seata AT一阶段提交本地事务释放锁和连接 →短锁、性能好仅靠 undo_log 回滚五、模式对比与选型维度AT 模式TCC 模式Saga 模式XA 模式一致性强一致全局锁强一致业务控制最终一致强一致侵入性无零代码高三阶段接口低状态机无性能中有锁高无锁高无锁低长锁适用场景90% 微服务高并发、性能敏感长流程、跨系统强一致、低并发选型建议优先用AT 模式简单、够用、性能好高并发 / 性能敏感 →TCC 模式长流程 / 跨系统 →Saga 模式金融核心 / 强一致 →XA 模式或 TCC六、快速落地Spring Boot AT 模式1. 依赖dependency groupIdio.seata/groupId artifactIdseata-spring-boot-starter/artifactId version1.7.1/version /dependency2. 配置application.ymlseata: application-id: order-service tx-service-group: my-tx-group # 事务组名 server: addr: 127.0.0.1:8091 # TC 地址 config: type: file registry: type: file3. 业务代码零侵入Service public class OrderService { GlobalTransactional // 开启全局事务TM public void createOrder(Order order) { // 1. 扣减库存库存服务RM stockService.deduct(order.getGoodsId(), order.getCount()); // 2. 扣减余额账户服务RM accountService.deduct(order.getUserId(), order.getAmount()); // 3. 创建订单订单服务RM orderMapper.insert(order); } }4. 初始化 undo_log在每个业务库执行undo_log 建表语句前面已给出。七、总结Seata 怎么解决分布式事务架构上通过TC/TM/RM三角色将分布式事务抽象为统一的 2PC 模型模式上提供AT/TCC/Saga/XA四种模式覆盖强一致→最终一致、低侵入→高性能全场景AT 核心一阶段提交本地事务 undo_log 记录快照 全局锁隔离二阶段异步删除日志或反向回滚兼顾一致性与性能本质把分布式事务的复杂性封装在框架内部让业务像写本地事务一样简单