SpringCloud(46)——Seata

1.Seata模式

Seata有四种模式

image.png

有AT、TCC、SAGA、XA模式
我们在测试时候使用的是AT模式

2.Seata组件

Seata有三个组件,TC、TM、RM,那么我们如何理解他们呢?
TC:事务控制者,也就是我们要加@GlobalTransactional的地方

image.png

TM:事务管理者,也就是直接启动的Seata服务

RM:资源管理者,也就是数据库

3.AT模式

image.png

在一阶段,Seata会拦截业务sql:
①解析SQL语义,找到“业务SQL”要更新业务数据,在业务数据被更新前,将其保存成"before image"
②执行“业务SQL”更新业务数据
③在业务数据更新之后,将其保存成"after image",最后生成行锁
以上操作全部在一个数据库事务内完成,这样就保证了一阶段操作的原子性

二阶段如果是顺利提交的话,
因为“业务SQL”在一阶段以及提交至数据库,所以Seata框架只需将一阶段保存的快照数据和行锁删掉,完成数据清理即可

二阶段回滚:
二阶段如果是回滚的话,Seata就需要回滚一阶段已经执行的"业务SQL",还原业务数据。
回滚方式时用"before image"还原业务数据;但在还原前要首先校验脏写,对比"数据库当前业务数据"和"after image",如果两份数据完全一直说明没有脏写,可以还原业务数据,如果不一致说明有脏写,出现脏写需要转人工处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容