seata的原理

整体机制
两阶段提交协议的演变:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。
二阶段:提交异步化,非常快速地完成。回滚通过一阶段的回滚日志进行反向补偿。

AT模式
一阶段:
1.tm开启一个全局事务,seata服务器返回xid
2.执行第一个本地事务(2.1前置镜像 2.2执行sql 2.3后置镜像),注册分支事务
3.feign调用第二个本地事务(3.1前置镜像 3.2执行sql 3.3后置镜像),注册分支事务

二阶段:
1.没有异常的情况,tm全局提交到tc,tc删除全局事务、分支事务
2.有异常的情况下,tm全局提交到tc,tc删除全局事务、分支事务,通知各个rm进行回滚操作

代码层面:
1.@SeataAutoConfiguration 和@GlobalTransitionAutoConfiguration
会注册一个BeanPostProcessor,名字是:GlobalTransactionScanner。
2.GlobalTransactionScanner.afterProperties()会初始化rm,tm,异步开启注册请求、重试请求、接受数据的线程池
3.GlobalTransactionScanner.wrapIfxxx()方法在生成动态代理对象的的时候会增加一个GlobalTransactionInterceptor.
这个类内部调用一个TransactionTemplate的模板类,模板类提供创建全局事务、创建分支事务、执行业务逻辑处理、提交、回滚

前置镜像和后置镜像还有注册分支事务都是通过代理datasource得到一个datasourceProxy里面处理的。

你可能感兴趣的:(seata的原理)