Seata分布式事务原理

suaxi
2021-05-05 / 0 评论 / 57 阅读 / 正在检测是否收录...

9.Seata原理01.png

1、TM开启分布式事务(TM向TC注册全局事务)

2、按业务场景,编排数据库、服务等事务内的资源(RM向TC汇报资源准备状态)

3、TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚)

4、TC汇总事务信息,决定最终是提交还是回滚事务

5、TC通知所有RM提交/回滚 资源,事务二阶段结束


Seata提供了四个模式:AT、TCC、SAGA、XA


AT模式

两阶段提交协议的演变:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源

二阶段:提交异步化(能快速完成);回滚通过一阶段的回滚日志进行反向补偿


一阶段:

10.一阶段.png

在一阶段,seata会拦截“业务SQL”:

1、解析SQL语义,找到“业务SQL”要更新的业务数据,在业务数据被更新前,将其保存为before image

2、执行“业务SQL”更新业务数据,更新之后将业务数据保存为after image

3、最后生成行锁

以上操作全部在一个数据库事务内完成,保证了一阶段操作的原子性


二阶段:

1、成功提交

二阶段正常执行的话,只需将一阶段保存的快照数据和行锁删除,即可完成数据清理,因为“业务SQl”在一阶段已经在提交至数据库

11.二阶段正常提交.png


2、事务回滚

二阶段如果出现异常,需要事务回滚,seata就需要回滚一阶段已经执行的“业务SQL”,还原业务数据;

回滚方式使用before image还原业务数据,在还原之前需要做校验脏写,对比数据库当前的业务数据和after image数据快照,如果两份数据完全一致,就说明没有脏写,执行还原操作,如果不一致,就需要转人工处理

12.二阶段事务回滚.png

0

评论 (0)

取消