java架构师培训-seata的AT 模式与 TCC 模式有什么区别

SeataAT模式是基于两阶段提交模式设计的,以高效且对业务零侵入的方式,解决微服务场景下面临的分布式事务问题。它使得应用代码可以像使用本地事务一样使用分布式事务,完全屏蔽了底层细节,SeataAT模式与SeataMT(TCC)模式的区别有以下几点:

使用上,TCC依赖于用户自行实现的三个方法成本较大;AT依赖全局事务注解和代理数据源,其余代码基本不需要改动,对业务无侵入、接入成本极小;

TCC的范围是在应用程序层中,该层实质上为某些业务逻辑实现了正向和反向方法。AT模式的范围位于基础数据源中,该数据源是通过保存操作行记录的前后快照并生成反向SQL语句来执行的。补偿操作较难实现,其优点是对上层应用程序透明;

TCC仅锁定在尝试阶段,并且后续的补偿逻辑事务是独立的。AT需要使用全局锁和GlobalLock注释来解决不同全局事务之间的写入冲突。如果分支事务在第一阶段成功,则全局锁定将在第二阶段开始时被锁定。释放,否则您需要阻塞直到分支事务的第二阶段回滚完成才能释放全局锁。

在AT模式下,每个数据库都被视为资源,在Seata中称为数据源资源。当企业通过JDBC标准接口访问数据库资源时,Seata框架将拦截所有请求并执行一些操作。提交每个本地事务后,SeataRM(资源管理器)将向TC(事务协调器)注册分支事务。请求链接调用完成后,发起者通知TC提交或回滚分布式事务,并进入两阶段调用过程。此时,TC将根据先前注册的分支交易回呼相应的参与者以执行相应资源的第二阶段。TC如何找到分支机构交易与资源之间的对应关系?每个资源都有一个全局唯一的资源ID,该ID在初始化期间用于向TC注册资源。在运行时,每个分支事务都使用其资源ID注册。这样,TC可以在第二阶段呼叫期间正确找到相应的资源。

关于AT模式用法,这里就不赘述了,主要包括以下几点:

增加全局事务注解@GlobalTransactional:在整个分布式事务发起方的业务方法上增加;

配置代理数据源:配置Seata的代理数据源

新建undo_log表:在事务链涉及的服务的数据库中新建undo_log表用来存储UndoLog信息,用于二阶段回滚操作,表中包含xid、branchId、rollback_info等关键字段信息。

推荐阅读:java架构师学习路线:分布式架构为什么需要数据中心

如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/113645363