Seata的AT模式是最终一致的分阶段事务模式,且无业务侵入,是Seata的默认模式。 AT模式通过在分布式事务的根节点上加锁来保证全局事务的一致性。AT模式的原理和设计基于全局事务和分支事务的概念。全局事务负责协调其下的分支事务,确保它们要么一起成功提交,要么一起失败回滚。分支事务则是满足ACID原则的本地事务,由Seata定义的三部分组件管理:Transaction Coordinator(TC)、Transaction Manager(TM)和Resource Manager(RM)。TM控制全局事务的边界,RM控制分支事务,负责分支注册、状态汇报,并接收TC的指令来驱动分支事务的提交和回滚。 AT模式的执行过程分为准备阶段、提交阶段和回滚阶段。在准备阶段,Seata向各个参与者发送prepare请求,要求进行事务资源的预留。提交阶段则是由TC调度XID下管辖的全部分支事务完成提交请求。回滚阶段则是在出现错误或需要回滚时,由TC调度全部分支事务进行回滚
AT模式下,当前分支事务执行流程如下:
一阶段:
-
TM发起并注册全局事务到TC -
TM调用分支事务 -
分支事务准备执行业务SQL
-
RM拦截业务SQL,根据where条件查询原始数据,形成快照。 -
RM执行业务SQL,提交本地事务,释放数据库锁。 -
RM报告本地事务状态给TC
二阶段:
-
TM通知TC事务结束 -
TC检查分支事务状态- 如果都成功,则立即删除快照
- 如果有分支事务失败,需要回滚。读取快照数据,将快照恢复到数据库。