AT模式是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。
1.Seata的AT模型
阶段一RM的工作:
● 注册分支事务
● 记录undo-log(数据快照)
● 执行业务sql并提交
● 报告事务状态
阶段二提交时RM的工作:
● 删除undo-log即可
阶段二回滚时RM的工作:
● 根据undo-log恢复数据到更新前
2.流程梳理
一阶段:
- TM发起并注册全局事务到TC
- TM调用分支事务
- 分支事务准备执行业务SQL
- RM拦截业务SQL,根据where条件查询原始数据,形成快照。
- RM执行业务SQL,提交本地事务,释放数据库锁。此时 money = 90
- RM报告本地事务状态给TC
二阶段: - TM通知TC事务结束
- TC检查分支事务状态
a. 如果都成功,则立即删除快照
b. 如果有分支事务失败,需要回滚。读取快照数据({"id": 1, "money": 100}),将快照恢复到数据库。此时数据库再次恢复为100
3.简述AT模式与XA模式最大的区别是什么?
● XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
● XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
● XA模式强一致;AT模式最终一致
可见,AT模式使用起来更加简单,无业务侵入,性能更好。因此企业90%的分布式事务都可以用AT模式来解决。