一、AT模型:保证数据的最终一致性
AT模型与XA模型都是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。每个分支事务(RM)执行成功后都会提交数据, 并向Seata(TC)报告状态,在此期间的状态就是一种中间状态(软状态)。等所有事务都执行完毕再根据各个分支事务上报的状态来决定是否通过log恢复数据,也就是回滚的过程。
二、流程图如下
三、流程图详解
阶段一:
TM发起并注册全局事务到TCTM调用分支事务- 分支事务准备执行业务SQL
RM拦截业务SQL,根据where条件查询原始数据,形成快照。
阶段二:
TM通知TC事务结束TC检查分支事务状态- 如果都成功,则立即删除快照
- 如果有分支事务失败,需要回滚。读取快照数据({"id": 1, "money": 100}),将快照恢复到数据库。此时数据库再次恢复为100