Seata事务管理

Seata术语

TC (Transaction Coordinator) - 事务协调者
维护全局和分支事务的状态,驱动全局事务提交或回滚。负责通知命令的中间件Seata-Server

TM (Transaction Manager) - 事务管理器
定义全局事务的范围:开始全局事务、提交或回滚全局事务。决定什么时候全局提交、回滚

RM (Resource Manager) - 资源管理器
管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。

Seata提供了四种不同的分布式事务解决方案:

· XA模式:强一致性分阶段事务模式,牺牲了一定的可用性,无业务侵入
· TCC模式:最终一致的分阶段事务模式,有业务侵入
· AT模式:最终一致的分阶段事务模式,无业务侵入,也是Seata的默认模式
· SAGA模式:长事务模式,有业务侵入

Seata事务管理_回滚

@GlobalTranscational
RM写表的过程,Seata 会拦截业务SQL,
首先解析 SQL 语义,在业务数据被更新前,将其保存成before image(前置镜像),
然后执行业务SQL,在业务数据更新之后,再将其保存成after image(后置镜像),最后生成行锁。

以上操作全部在一个数据库事务内完成,这样保证了一阶段操作的原子性。

一阶段步骤

Seata事务管理_回滚_02


二阶段步骤

Seata事务管理_全局事务_03

因为“业务 SQL”在一阶段已经提交至数据库, 所以 Seata 框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可。

注意:

TM执行失败,通知TC全局回滚,TC此时通知所有的RM进行回滚,根据UNDO_LOG反向操作,
使用before image还原业务数据,删除UNDO_LOG,但在还原前要首先要校验脏写,对比“数据库当前业务数据”和 “after image”,
如果两份数据完全一致就说明没有脏写,可以还原业务数据,如果不一致就说明有脏写,出现脏写就需要转人工处理。