Seata的TCC模式学习整理

简介: Seata的TCC模式学习整理

 seata相对于AT模式而言,虽然说没有框架帮忙处理前镜像和后镜像,但是它相对来说,比AT模式,要做的时候要多一些,相对于业务系统而言。比如补偿模式下的Tcc模式的流程:


一、整个流程

      整个流程下来,Tcc的执行流程比较简单,相对于AT模式而言。首先初始化事务协调器TC。完成事务协调器之后,启动服务端Netty。业务系统通过执行业务,通过Aop增强,将业务系统中带注解的相关信息GlobalTransactional和TwoPhaseBusinessAction逐一注册到Map结构的数据结构中,然后注册到RM中。接着基于全局事务进行发起。执行try操作,如果try操作没有出现异常,则执行confirm操作操作,否则执行cancel操作,而执行两个阶段的过程都是基于Aop增强+动态代理的。


二、使用Seata的Tcc模式

引入seataclient的依赖

业务逻辑上加@GlobalTransactional作为发起方的标识

引入@TwoPhaseBusinessAction,带注解的方法是try方法

对try补偿,调用confirm、cancal,完成提交或回滚

     但是使用发现,如果分布式事务中嵌套分布式事务,如果嵌套的分布式事务出现异常,不会被捕捉到的问题,导致数据出现异常的问题。因此需要在嵌套的分布式事务中尽量避免异常。


三、业务系统调用的逻辑

1)首先GlobalTransactionScanner#wrapIfNecessary,进行Aop增强,进入到增强的逻辑,isTccAutoProxy设置remotingServiceMap信息。设置完成后,提取TwoPhaseBusinessAction注解带的信息。调用远程服务netty进行注册。将资源信息进行缓存,netty会基于注册事件请求注册资源处理器。

2)此时GlobalTransactionalInterceptor会进行拦截,也即从@GlobalTransactional作为发起方进行发起全局事务。GlobalTransactionalInterceptor会调用TransactionalTemplate执行execute,获取全局事务信息。设置事务的隔离级别。开启全局事务beginTransaction。

3)业务系统: 执行业务系统中的try()方法,基于invoke,此时会调用到业务系统的try方法,进行try操作。保存xid、分支类型、绑定分支。处理tcc切面,和返回业务结果。

4)ActionInterceptorHandler处理tcc切面,和返回业务结果。进行日志存储doTccActionLogStore。完成这个操作相当于一阶段完成,此时会对一阶段的执行状态进行上报, 分支上报、执行业务Action上下文清理。没有发生异常,提交事务commitTransaction。RmBranchCommitProcessor进行资源分支提交处理处理。TCCResourceManager中 branchCommit获取业务action上下文,TCCResourceManager:commitMethod.invoke(targetTCCBean, args)调用业务,如果当前提交正常,则执行confirm方法,否则执行调用业务系统cancel方法。

5)完成之后,执行全局事务提交结束commitTranscation。如果正常,则二阶段执行日志的删除,否则执行回滚。


四、uml整个过程的流程图

目录
相关文章
|
30天前
|
数据库 微服务
SEATA模式
Seata 是一款开源的分布式事务解决方案,支持多种事务模式以适应不同的应用场景。其主要模式包括:AT(TCC)模式,事务分三阶段执行;TCC 模式,提供更灵活的事务控制;SAGA 模式,基于状态机实现跨服务的事务一致性;XA 模式,采用传统两阶段提交协议确保数据一致性。
43 5
|
2月前
Seata框架在AT模式下是如何保证数据一致性的?
通过以上这些机制的协同作用,Seata 在 AT 模式下能够有效地保证数据的一致性,确保分布式事务的可靠执行。你还可以进一步深入研究 Seata 的具体实现细节,以更好地理解其数据一致性保障的原理。
41 3
|
7月前
|
Apache 开发者
Apache Seata 如何解决 TCC 模式的幂等、悬挂和空回滚问题
【6月更文挑战第8天】Apache Seata 是一款分布式事务框架,解决TCC模式下的幂等、悬挂和空回滚问题。通过记录事务状态处理幂等,设置超时机制避免悬挂,明确标记Try操作成功来处理空回滚。Seata 提供丰富配置和管理功能,确保分布式事务的可靠性和效率,支持复杂事务处理场景,为企业业务发展提供支持。
248 7
|
8月前
|
NoSQL Java 数据库
Seata常见问题之xa模式下插入一条数据再更新这条数据会报错如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
209 2
|
8月前
|
Java 关系型数据库 微服务
Seata常见问题之项目一直启动不成功如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
618 0
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
1天前
|
Java 关系型数据库 数据库
微服务SpringCloud分布式事务之Seata
SpringCloud+SpringCloudAlibaba的Seata实现分布式事务,步骤超详细,附带视频教程
14 1
|
26天前
|
消息中间件 SQL 中间件
大厂都在用的分布式事务方案,Seata+RocketMQ带你打破10万QPS瓶颈
分布式事务涉及跨多个数据库或服务的操作,确保数据一致性。本地事务通过数据库直接支持ACID特性,而分布式事务则需解决跨服务协调难、高并发压力及性能与一致性权衡等问题。常见的解决方案包括两阶段提交(2PC)、Seata提供的AT和TCC模式、以及基于消息队列的最终一致性方案。这些方法各有优劣,适用于不同业务场景,选择合适的方案需综合考虑业务需求、系统规模和技术团队能力。
182 7
|
2月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
85 6
|
2月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
43 6