Seata的AT模型

news/2024/10/13 22:34:59

什么是seata

Seata(Simple Extensible Autonomous Transaction Architecture)是一个开源的分布式事务解决方案,它主要用于解决微服务架构下分布式事务问题。Seata 提供了多种分布式事务解决方案,适用于不同场景,以下是其几种主要的解决方案:

1. AT 模式(Automatic Transaction)

特点:AT模式是Seata默认的分布式事务解决方案,主要适用于关系型数据库。

实现原理:AT模式通过代理数据源,在本地事务中自动生成回滚日志,提交事务时生成一个全局事务ID,并将其注册到Seata的事务协调器(TC)。如果事务失败或回滚,则利用保存的回滚日志恢复到事务开始前的状态。

使用场景:适合于业务逻辑相对简单、数据库变更较多的场景。

优点:开发简单,不需要手动编写分支事务的提交和回滚逻辑。

缺点:AT模式主要依赖于Seata对SQL的解析,支持性会随着SQL复杂度增加而降低。

2. TCC 模式(Try-Confirm-Cancel)

特点:TCC 模式是基于业务定义的手动事务补偿模式,需要开发者自己实现 Try、Confirm 和 Cancel 三个方法。
实现原理:

Try:预留资源阶段,进行业务检查并预留资源。

Confirm:确认执行阶段,在Try阶段成功的情况下,正式提交事务。

Cancel:取消执行阶段,在Try阶段失败或需要回滚时,释放预留的资源。

使用场景:适合有复杂业务逻辑和需要精确控制资源的场景,比如支付、订单处理等。

优点:提供了较强的灵活性,可以根据业务需求进行精细化控制。

缺点:开发工作量较大,开发者需要手动编写每个操作的三步流程。

3. SAGA 模式

特点:SAGA 是一种长事务解决方案,适合于长时间运行的分布式事务。

实现原理:

事务被拆分成一系列可以独立提交的子事务,并定义每个子事务的补偿操作。

如果所有子事务都成功,事务就提交;如果某个子事务失败,则根据定义好的补偿机制,逐步逆向执行补偿操作以回滚事务。

使用场景:适合长时间、跨多个业务系统的流程型事务,例如机票、酒店、支付等多步骤的预定场景。

优点:能够处理长事务、复杂业务流程的场景,且可以在每一步操作中定义具体的补偿逻辑。

缺点:补偿逻辑的编写较为繁琐,且需要业务层面有更深入的理解。

4. XA 模式

特点:XA 是一种分布式事务协议,基于两阶段提交(2PC)协议,保证全局数据的一致性。

实现原理:

第一阶段:所有分支事务都先执行准备(Prepare)操作,如果所有分支都准备成功,则进入第二阶段。

第二阶段:如果所有分支都准备成功,则提交(Commit);如果有一个分支准备失败,则回滚(Rollback)。

使用场景:适合对数据一致性要求高的场景,通常用于支持XA协议的数据库。

优点:能够保证严格的ACID事务特性。

缺点:由于两阶段提交的同步机制,可能会导致性能较差,适合事务量较小的场景。

5. 自定义事务模式

特点:开发者可以基于Seata的框架,结合具体业务场景自定义事务解决方案。

实现原理:结合Seata的事务协调器(TC)和资源管理器(RM),实现特定业务场景的事务逻辑。

使用场景:适合标准模式无法完全满足的复杂场景,或者需要业务和框架深度结合的场景。

优点:灵活性极高,可以根据业务需求自由调整。

缺点:开发成本高,要求开发者对Seata框架有深入理解。

总结

Seata 提供的分布式事务解决方案主要有四种:AT、TCC、SAGA 和 XA 模式,每种模式都有其适用场景和优缺点。选择哪种模式应根据业务的复杂度、性能要求以及对数据一致性的要求来决定:

数据库为主、操作简单:AT 模式。

业务流程复杂、需要手动控制:TCC 模式。

长时间、多步骤事务:SAGA 模式。

数据一致性要求高、XA支持的数据库:XA 模式。

Seata的AT模型

基本流程图

详细流程

一阶段

1.TM向TC注册一个全局事务,并生成一个全局事务ID

2.调用分支事务,在全局事务的上下文中,业务逻辑调用其他微服务,每个微服务会涉及到数据库操作(CRUD)。

  • 生成:在每次数据变更操作之前,RM会记录变更前的数据(前镜像)和变更后的数据(后镜像),这些信息会被保存在undo_log表中。

3.注册分支事务,RM会把这些操作向TC注册为分支事务,并关联到相应的全局事务(通过XID标识)。

4.业务操作执行:在成功生成undo log后,数据库操作才会被真正执行。

5.RM向TC报告事务状态

二阶段

1.TM请求全局提交:当业务逻辑确认所有的操作都成功后,TM会向TC发起全局提交请求。

2.检查分支事务状态

3.提交事务或回滚事务

  • 提交事务会删除undo_log表中的记录

  • 回滚事务会恢复undo_log表中的记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71244.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

任务3

导入照片:在照片编辑软件(如 Photoshop、GIMP 或 Canva)中打开要添加水印的照片。 创建文本图层:创建一个新的文本图层,用于存放水印文字。 输入水印文本:在文本图层中输入您的水印文本。您可以调整字体、大小、颜色和透明度。 调整位置:将水印文本放置在照片中的合适位…

[转]深度学习下的相机标定

相机标定在计算机视觉和机器人等领域中占据举足轻重的地位,它为后续场景理解及决策推断提供了标准化的成像空间和精准的几何先验。然而,传统的相机标定技术常常依赖于繁琐的人工干预和特定的场景假设,因此难以灵活拓展至不同的相机模型和标定场景。 近年来,基于深度学习的解…

标题、导航、目录添加序号

在主题文件夹添加base.user.css文件,把下面的内容复制进去。/*************************************** Header Counters in Content**************************************//** initialize css counter */ #write {counter-reset: h1 }h1 {counter-reset: h2 }h2 {counter-r…

qt深入解析

1.Qt IO 设备类型:顺序存储设备:如网卡。。 随机存储设备:如.txt..Qt中IO设备继承图 Qt中的文件系统 通用开发库,跨平台 QIODevice IO父类,提供字节块读写通用操作和基本接口 QFileDevice提供文件操作通用实现 QFile访问本地文件或嵌入资源 QTemporayFile创建和访问本地系…

安装WSL2

1.简介 SWL2是windows平台上的linux系统,有一定的优点和限制,最差的一点就是网络了,只能使用NAT相似的技术,不能完全替代虚拟机. 官网资料很详细了,也不是太多,这里只是提供快速入门. 2.初始安装 2.1.打开虚拟平台和WSL2.2.installl wsl2 #1.设置wsl版本 PS C:\Users\pc> ws…