Seata 分布式事务实现原理 - 图1

整体机制

image.png


什么是前置快照,就是我在执行修改sql之前先给这个修改前的值查询一遍,比如说我执行

update product set count = count-1 where id = 2 之前,Seata会先根据id=2查询出来,这就是前置快照,然后Seata还会把修改后的值再查询出来保存起来,这就是后置快照,把前置快照和后置快照保存到UndoLog日志,如果第二阶段回滚了,Seata会根据这个UndoLog日志生成反向sql给数据补充回来.

Seata运行原理

假如说Order服务调用Account服务

Order服务开启全局事务时候会跟远程的Seata-Server通讯, 然后执行自己的业务方法,

然后Order服务开始执行业务代码,向Seata-Server注册分支事务,然后执行本地提交,提交成功了就告诉Seata-Server我本地成功了,如果我执行失败了就告诉Seata_Server我执行失败了.

通常Order服务远程调用Account服务也是这样,Account注册分支事务,执行本地提交,然后告诉Seata-Server是成功还是失败了.

然后Order服务发起Commit ,如果成功了就告诉Seata-Server发起全局成功,如果出现异常的话,会告诉Seata-Server发起全局回滚.