上一篇 <<<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)
<<<CAP理论简单概况
<<<Base理论核心思想
<<<一致性协议--XA接口
<<<一致性协议--Jta规范
<<<一致性协议--2PC提交协议
<<<一致性协议--3PC提交协议
<<<2PC与3PC协议的提交区别
<<<主流的分布式事务解决框架
<<<LCN-框架介绍
<<<LCN-实现原理剖析
<<<LCN-事务协调者(TM)安装启动
<<<SpringBoot整合LCN
<<<LCN-核心源码分析
<<<LCN-集群模式介绍
<<<Seata-框架介绍
<<<Seata-TM执行时突然宕机了会造成什么问题
<<<Seata-核心源码分析
<<<SpringBoot整合Seata
<<<Seata与Lcn的区别
网友评论