Seata原理实现/执行流程/生命周期

上一篇 << 下一篇 >>>Seata-TM执行时突然宕机了会造成什么问题


实现原理图

文字说明

a.发起方(TM)和我们的参与方(RM)项目启动之后和协调者TC保持长连接;
b.发起方(TM)会向我们的TC协调者申请一个全局的事务id,保存到threadlocal中;
c.TM和RM都会被Seata代理数据源,在原生的sql之前和之后保存原来和修改后日志到undo_log中,方便后期实现回滚。
d.TM使用feign客户端调用接口的时候,重写feign客户端,在ThreadLoacl中获取xid设置到请求头中给RM
参与方(RM)从请求中头中获取到该全局事务xid,设置到ThreadLoacl中,同时也会向seataserver注册该分支事务。
e.TM(发起方)将当前本地事务的结果,告诉给协调者TC,协调者TC在通知所有的分支是否回滚。
如果事务全部成功,TM和RM会根据事务ID和xid删除对应的undo_log表记录
如果事务异常,TM和RM根据事务ID和xid查询undo_log表,逆向生成sql语句执行回滚,同事删除undo_log表记录。


推荐阅读:
<<<分布式事务产生的背景
<<<解决分布式事务的核心思路
<<<柔性事务和刚性事务(ACID)
<< << <<<一致性协议--XA接口
<<<一致性协议--Jta规范
<<<一致性协议--2PC提交协议
<<<一致性协议--3PC提交协议
<<<2PC与3PC协议的提交区别
<<<主流的分布式事务解决框架
<< << << << << << << << << << <<

你可能感兴趣的:(Seata原理实现/执行流程/生命周期)