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并执行,以完成分支的回滚。当然事务完成后会释放所有资源和删除所有日志。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通