seata AT 模式

AT模式使用起来对代码的侵入性很小,能够快速的使项目具备分布式事务的能力。

Seata的AT 模式是两阶段提交协议的演变:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。


三大角色

  • RM:资源管理者(Resource Manager ),对应微服务架构中小型服务的业务数据库,业务数据库代表了一个分支事务。RM管理分支事务并与 TC 进行协调注册分支事务并且汇报分支事务的状态,驱动分支事务的提交或回滚。

  • TM:事务管理者(Transaction Manager),分布式事务的发起者,负责向TC申请全局事务XID。TM在调用其他服务提供的API执行本地分支事务时会向各分支事务传递XID。

  • TC:事务协调者(Transaction Coordinator),负责管理整个分布式事务,每个节点的分支事务在执行之前,都会在事务协调者上注册,本地事务执行结束后,还会向协调者汇报。当事务需要提交或回滚时,也协调者负责推送给各个RM。每个节点的分支事务在执行之前,使用XID向TC注册分支事务并接收TC的提交或回滚指令。

AT一阶段

在一阶段中,Seata会拦截“业务SQL“,首先解析SQL语义,找到要更新的业务数据,在数据被更新前,保存下来"undo",然后执行”业务SQL“更新数据,更新之后再次保存数据”redo“,最后生成行锁,这些操作都在本地数据库事务内完成,这样保证了一阶段的原子性。

AT二阶段

相对一阶段,二阶段比较简单,负责整体的回滚和提交,如果之前的一阶段中有本地事务没有通过,那么就执行全局回滚,否在执行全局提交,回滚用到的就是一阶段记录的"undo Log",通过回滚记录生成反向更新SQL并执行,以完成分支的回滚。当然事务完成后会释放所有资源和删除所有日志。

posted @   孤独求BUG  阅读(380)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示