首页 > 其他分享 >Seata的AT模型

Seata的AT模型

时间:2024-10-13 22:33:35浏览次数:8  
标签:事务 场景 Seata 模型 回滚 模式 提交

什么是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表中的记录

标签:事务,场景,Seata,模型,回滚,模式,提交
From: https://www.cnblogs.com/freps/p/18463145

相关文章

  • openvino 大模型qwen2.5推理案例
    参看:https://github.com/openvinotoolkit/openvino.genai/releases/tag/2024.4.0.0https://github.com/TommyZihao/openvino_tonypi/blob/main/OpenVINO-0911/AIPC%E4%BB%A3%E7%A0%81/%E3%80%90B1%E3%80%91%E4%B8%89%E8%A1%8C%E4%BB%A3%E7%A0%81%E5%BC%80%E5%90%AF%E5%A4%......
  • Seata的AT模式执行流程
    Seata的AT模式是Seata的默认模式。总共分为几步1.登记分支先给每个要参与的服务(分支事务)登记一下,记录下它们是谁,要做什么。2.执行操作每个服务登记好后就开始执行自己的任务,执行前后记下每个服务操作前后的数据状态,以防万一需要回滚。3.检查结果等所有服务都执行完了,TC会......
  • 《深入理解分布式事务与Seata解决方案》
    分布式事务-重要1.数据库的事务1、事务概念事务是一个完整的,不可分割操作单元。整个事务要么全部执行成功,要么全部执行失败。事务具备4个特性:ACIDA:原子性【】C:一致性【数据的一致性:事务开始前和事务结束后,数据总量不变】I:隔离性【事务相互隔离,互不影响】D:持久性【事务一......
  • Seata的AT模式的执行流程
    Seata的AT模式:AT模式是Seata的默认模式,也是一种最终一致的分阶段事务模式,在一阶段,Seata拦截业务SQL,解析SQL语义,找到要更新的业务数据,并保存快照数据和行锁‌。简单来说就是看中结果,结果需要符合业务实际逻辑步骤准备undo-log(数据快照),简单说就是建个数据库用于备份数据,谁需要备份......
  • 在K8S中,CNI模型有哪些?
    在Kubernetes(K8S)中,CNI(ContainerNetworkInterface,容器网络接口)模型是一个标准化的接口规范,用于在容器创建时配置和管理其网络连接。以下是关于K8S中CNI模型的详细介绍:1.CNI模型概述CNI是由CloudNativeComputingFoundation(CNCF)维护的一个标准,它定义了一组简单、统一的接口,允......
  • 在K8S中,网络模型有哪些?
    在Kubernetes(K8S)中,网络模型的设计是为了满足容器化应用之间的通信需求。K8S网络模型主要涵盖以下几种:1.基础网络模型Pod内容器间的通信:Pod内的各个容器共享同一网络名称空间,该名称空间由构建Pod对象的基础架构容器所提供。同一个Pod内的容器,通过lo接口(即本地回环接口)完成交......
  • 简述Seata的AT模型
    AT模式是分阶段提交的事务模型,不过缺弥补了XA模型中资源锁定周期过长的缺陷。1.Seata的AT模型阶段一RM的工作:●注册分支事务●记录undo-log(数据快照)●执行业务sql并提交●报告事务状态阶段二提交时RM的工作:●删除undo-log即可阶段二回滚时RM的工作:●根据undo-log......
  • Seata的AT模式的执行流程
    AT模式是解决分布式事务的一种方式AT模式与XA模式都是分阶段提交的事务模型,弥补了XA模型中资源锁定周期过长的缺陷,企业基本都用。1.AT模式基本流程图:阶段一RM的工作:注册分支事务记录undo-log(数据快照)执行业务sql并提交报告事务状态阶段二提交时RM的工作:删除undo-log即......
  • 什么是分布式事务?使用Seata有哪些解决方案?Seata的AT模式的执行流程
    什么是分布式事务?简单来说:在分布式系统中出现的事务问题,称为分布式事务。为什么会出现分布式事务:一个分布式事务流程图在这个业务中有3个数据库连接,就没有办法做到全局的事务控制。这就是分布式事务问题分布式事务产生的情况有两种:​ 1.业务跨多个服务实现​ 2.业务跨多......
  • Seata的AT模式的执行流程
    在Seata的事务管理中有三个重要的角色:TC(TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。TM(TransactionManager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。RM(ResourceManager)-资源管理器:管理......