Seata AT模式与TCC模式对比,我们应该选择哪种分布式事务解决方案

简介: Seata AT模式与TCC模式对比,我们应该选择哪种分布式事务解决方案

前言

在前面的博客中,我们依次讲解了Seata AT模式的原理及使用方式,上一篇博客中我们讲解了如何在Spring Cloud中集成Seata TCC模式,那么就有一个疑问,我们在实际项目中,应该选择哪种分布式事务解决方案呢?

优缺点对比

AT模式 TCC模式
新手入门难度 容易 适中
业务侵入性
性能 一般
编码工作量 一般
是否支持复杂sql 不完全支持 支持

1.【新手入门难度】AT模式的代码编写方式和平时一样,只需要在TM入口加上@GlobalTransactional即可,开发人员按照正常逻辑编码完全没有问题;TCC模式的设计思路和AT模式完全不一样,TCC的一阶段和二阶段都是需要开发人员自行编码处理的,在业务处理上需要按照TCC的资源预留方式开发,学习成本上较AT模式要高上一个级别,所以在新手入门难度这一点上,AT模式更加容易;

2.【业务侵入性】AT模式是业务无侵入的,开发人员只需要关注业务SQL即可,二阶段的处理完全由Seata框架托管;TCC模式无论是一阶段还是二阶段,全部的TryConfirmCancel逻辑全部需要开发人员根据业务需求自行编码;所以在业务侵入性上,AT模式更好;

3.【性能】AT模式在一阶段处理完毕后,还会存在行锁,此时如果有其他事务需要操作被行锁锁住的记录时,会被阻塞,直至分布式事务结束才能拿到行锁;TCC模式因为是资源预留的设计方式,只有在一阶段预留资源时存在竞争,一阶段处理完毕后,不管分布式事务是否结束,后续都不存在资源竞争问题,所以TCC模式相较于AT模式,性能是更好的;

4.【编码工作量】AT模式只关注业务SQL,TCC模式需要根据业务设计来实现资源预留方案,二阶段提交和回滚逻辑全部需要开发人员编码实现,所以编码工作量上几乎是AT模式的2~3倍;

5.【是否支持复杂sql】AT模式需要针对提交的业务SQL进行拦截,并进行解析,根据对应的业务SQL生成前后镜像,这也就意味着AT模式并不能支持很复杂的业务SQL;TCC模式不用关心具体的业务SQL,Seata只会根据开发人员编码分别调用TryConfirmCancel方法,所以在这一点上,TCC模式更胜一筹;

该如何选择

根据上述AT模式与TCC模式的对比,我们可以了解到,如果业务功能对性能要求很高,并且属于公司的核心业务,那么建议采用TCC模式;如果该功能对性能要求一般,建议采用AT模式;有一点需要提醒的是,AT模式和TCC模式是可以在一个项目中共存的,所以小伙伴们完全可以根据具体的业务需求选择任意的分布式事务解决方案;感兴趣的小伙伴还可以上github下载我准备好的相关案例:awesome-seata


相关文章
|
1月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
3月前
|
存储 SQL 微服务
常用的分布式事务解决方案(三)
常用的分布式事务解决方案(三)
|
23天前
|
数据库 微服务
SEATA模式
Seata 是一款开源的分布式事务解决方案,支持多种事务模式以适应不同的应用场景。其主要模式包括:AT(TCC)模式,事务分三阶段执行;TCC 模式,提供更灵活的事务控制;SAGA 模式,基于状态机实现跨服务的事务一致性;XA 模式,采用传统两阶段提交协议确保数据一致性。
41 5
|
1月前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
54 6
|
1月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
32 6
|
29天前
Seata框架在AT模式下是如何保证数据一致性的?
通过以上这些机制的协同作用,Seata 在 AT 模式下能够有效地保证数据的一致性,确保分布式事务的可靠执行。你还可以进一步深入研究 Seata 的具体实现细节,以更好地理解其数据一致性保障的原理。
40 3
|
29天前
|
消息中间件 运维 数据库
Seata框架和其他分布式事务框架有什么区别
Seata框架和其他分布式事务框架有什么区别
28 1
|
1月前
|
缓存 NoSQL PHP
Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出
本文深入探讨了Redis作为PHP缓存解决方案的优势、实现方式及注意事项。Redis凭借其高性能、丰富的数据结构、数据持久化和分布式支持等特点,在提升应用响应速度和处理能力方面表现突出。文章还介绍了Redis在页面缓存、数据缓存和会话缓存等应用场景中的使用,并强调了缓存数据一致性、过期时间设置、容量控制和安全问题的重要性。
43 5
|
1月前
|
监控
Saga模式在分布式系统中保证事务的隔离性
Saga模式在分布式系统中保证事务的隔离性
|
2月前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
75 4