简述Seata的AT模型
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模式来解决。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix