这是我参与2022首次更文挑战的第11天,活动详情查看2022首次更文挑战
深入AT模式第二阶段实现原理
根据AT模式第一阶段的实现原理来看,分支的本地事务可在第一阶段提交完成后马上释放本地事务锁定的资源,这是AT模式和XA最大不同点,XA事务的两阶段提交,锁定资源后持续到第二阶段的提交或者回滚后才释放资源,因此AT模式降低了锁的范围,从而提升了分布式事务的处理效率,能实现这样的优化,得益于Seata记录了回滚日志,即使第二阶段发生异常,只需要根据undo_log中记录的数据进行回滚即可。
TC接收到所有事务分支的事务状态汇报后,决定对全局事务进行提交或者回滚。
事务提交
如果决定的是全局提交,说明此时所有分支事务已完成了提交,只需要清理undo_log日志即可,这也是和XA最大的不同点,在第一阶段各个分支事务的本地事务已提交了,所以这里并不需要TC来触发所有分支事务的提交。具体步骤如下全局事务提交流程图所示:
事务提交的执行流程:
- 分支事务收到TC的提交请求后把请求放入一个异步任务队列中,并马上返回提交成功的结果返回给TC
- 从异步队列中执行分支,提交请求,批量删除响应undo_log日志。
在第一个步中,TC不需要同步知道分支事务的处理结果,因此分支事务才会采用异步的方式执行,因为对于提交操作,分支事务只需要清除undo_log日志即可,而即便日志清除失败,也不会对整个分布式事务产生任何影响。