Seata分布式事务源码分析

212 阅读1分钟

深入学习 Seata 也有段时间,包括了解各个事务模式的原理以及分析实现的源码。由于只分析了 AT 和 TCC 事务模式的代码以及篇幅限制,所以下面仅涉及到 AT 事务模式的主要几个处理流程。

源码分析

AT事务模式

AT事务模式

开启全局事务

源码中没有发现 Seata 修改事务管理器的处理流程,只是拦截 @GlobalTransactional 注解的方法,在实际方法调用前发 RPC 请求到 TC 事务协调者注册全局事务。

开启全局事务

注册分支事务

Seata 通过代理数据源以及相关的其它类,实现在实际事务提交前发 RPC 请求到 TC 事务协调者注册分支事务。在 ConnectionProxy.commit 方法中也负责把回滚日志记录插入到 UNDO_LOG 表。

图片.png

注册分支事务

通知TC提交全局事务

同个全局事务中可能会有多个TM事务管理器参与,其中只有开启全局事务的事务管理器才会发 RPC 请求到 TC 事务协调者要求提交全局事务。

通知TC提交全局事务

TC通知分支事务提交

客户端处理分支事务提交的代码不如上面几个流程清晰,按照官方文档是客户端处理分支事务提交时是异步删除 UNDO_LOG 中对应的回滚日志记录即可。

图片.png

TC通知分支事务提交

参考资料