SEATA分布式事务——AT模式(一)
作者:admin | 分类:顶尖机器人 | 浏览:2 | 日期:2026年03月30日一、分布式事务与Seata AT模式的诞生背景
在微服务架构大行其道的今天,分布式事务管理成为了绕不开的技术难题。当业务被拆分为多个独立的微服务后,一次完整的业务流程往往需要调用多个服务的接口,比如用户下单操作,就涉及订单服务创建订单、库存服务扣减库存、账户服务扣除余额等多个步骤。传统的单机事务机制只能保证单个数据库内的数据一致性,却无法覆盖跨服务、跨数据库的场景,一旦某个环节出现异常,就可能导致数据不一致,比如订单创建成功但库存未扣减,或者余额扣除了订单却未生成。
为了解决这一问题,Seata(Simple Extensible Autonomous Transaction Architecture)应运而生,它是一款开源的分布式事务解决方案,致力于提供高性能、简单易用的分布式事务服务。其中,AT(Automatic Transaction)模式是Seata最具代表性、应用最广泛的模式之一,它以无侵入的特性,让开发者无需大幅修改业务代码,就能轻松实现分布式事务管理。
二、Seata AT模式的核心架构
Seata的AT模式依托三大核心组件协同工作,构建起完整的分布式事务管理体系:
事务协调器(TC):作为独立的服务,TC是全局事务的“大脑”,负责维护全局事务和分支事务的状态,协调全局事务的提交或回滚。它不包含任何业务代码,仅专注于事务的调度与管控。
事务管理器(TM):通常对应微服务架构中的聚合服务,负责定义全局事务的范围,开启、提交或回滚全局事务。当需要发起跨服务的业务操作时,TM会向TC申请开启全局事务,获取全局唯一的事务ID(XID),并将XID贯穿整个服务调用链路。
资源管理器(RM):对应具体的微服务,是每个分支事务的执行者。RM负责执行本地事务的具体操作,向TC注册分支事务,报告分支事务的执行状态,并根据TC的指令,完成分支事务的提交或回滚。
三、Seata AT模式的工作原理
AT模式基于两阶段提交协议(2PC)进行优化,通过数据源代理和回滚日志机制,实现了分布式事务的自动化管理。
(一)一阶段:本地事务提交
当业务方法被@GlobalTransactional注解标记后,TM会向TC申请开启全局事务,生成XID并在服务调用中传递。以订单创建扣减库存为例,RM(库存服务)在执行扣减库存的业务SQL时,会经历以下步骤:
SQL解析:Seata通过代理数据源,拦截业务SQL,解析出SQL类型、操作表、WHERE条件等关键信息。
生成前后镜像:根据解析出的条件,查询业务操作前的数据状态(Before Image),执行业务SQL后,再查询操作后的数据状态(After Image)。
记录回滚日志:将前后镜像数据、SQL相关信息等,组成回滚日志,插入到Undo Log表中。
全局锁与本地事务提交:RM向TC注册分支事务,获取分支ID,并申请操作数据的全局锁。在确保拿到全局锁后,将本地事务(业务数据更新和回滚日志插入)一并提交,并向TC报告分支事务的执行结果。
(二)二阶段:全局事务提交或回滚
全局提交:如果所有分支事务都执行成功,TC会通知所有RM进行全局提交。RM只需删除Undo Log中的回滚日志,释放全局锁,整个全局事务完成。
全局回滚:若有任意一个分支事务执行失败,TC会发起全局回滚指令。RM根据XID和分支ID查询Undo Log,利用Before Image生成反向SQL,还原业务数据,之后删除回滚日志,释放全局锁,保证所有分支事务的数据一致性。
四、Seata AT模式的核心优势
无侵入性:开发者只需在全局事务发起方法上添加
@GlobalTransactional注解,分支事务无需任何修改,就能实现分布式事务管理,极大降低了学习和开发成本。高效性能:相较于传统的XA模式,AT模式在一阶段直接提交本地事务,减少了资源锁定时间,通过异步化提交等优化,兼顾了全局事务的效率。
强一致性保障:通过全局锁机制和回滚日志,AT模式能有效避免脏写,在大多数场景下保证数据的最终一致性,满足绝大多数业务的需求。