1、TM开启分布式事务(TM向TC注册全局事务)
2、按业务场景,编排数据库、服务等事务内的资源(RM向TC汇报资源准备状态)
3、TM结束分布式事务,事务一阶段结束(TM通知TC提交/回滚)
4、TC汇总事务信息,决定最终是提交还是回滚事务
5、TC通知所有RM提交/回滚 资源,事务二阶段结束
Seata提供了四个模式:AT、TCC、SAGA、XA
AT模式
两阶段提交协议的演变:
一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源
二阶段:提交异步化(能快速完成);回滚通过一阶段的回滚日志进行反向补偿
一阶段:
在一阶段,seata会拦截“业务SQL”:
1、解析SQL语义,找到“业务SQL”要更新的业务数据,在业务数据被更新前,将其保存为before image
2、执行“业务SQL”更新业务数据,更新之后将业务数据保存为after image
3、最后生成行锁
以上操作全部在一个数据库事务内完成,保证了一阶段操作的原子性
二阶段:
1、成功提交
二阶段正常执行的话,只需将一阶段保存的快照数据和行锁删除,即可完成数据清理,因为“业务SQl”在一阶段已经在提交至数据库
2、事务回滚
二阶段如果出现异常,需要事务回滚,seata就需要回滚一阶段已经执行的“业务SQL”,还原业务数据;
回滚方式使用before image
还原业务数据,在还原之前需要做校验脏写,对比数据库当前的业务数据和after image
数据快照,如果两份数据完全一致,就说明没有脏写,执行还原操作,如果不一致,就需要转人工处理
评论 (0)