首页 > 其他分享 >Seata的AT模式的执行流程

Seata的AT模式的执行流程

时间:2024-10-13 21:11:37浏览次数:9  
标签:事务 快照 Seata money 流程 XA 模式 RM

AT模式是解决分布式事务的一种方式
AT模式与XA模式都是分阶段提交的事务模型,弥补了XA模型中资源锁定周期过长的缺陷,企业基本都用。

1.AT模式基本流程图:

image

阶段一RM的工作:

  • 注册分支事务
  • 记录undo-log(数据快照)
  • 执行业务sql并提交
  • 报告事务状态
    阶段二提交时RM的工作:
  • 删除undo-log即可
    阶段二回滚时RM的工作:
  • 根据undo-log恢复数据到更新前
    阶段二提交时RM的工作:
  • 删除undo-log即可
    阶段二回滚时RM的工作:
  • 根据undo-log恢复数据到更新前

2.流程梳理

我们用一个真实的业务来梳理下AT模式的原理。
比如,现在有一个数据库表,记录用户余额:
image

其中一个分支业务要执行的SQL为:

 update tb_account set money = money - 10 where id = 1

AT模式下,当前分支事务执行流程如下:
一阶段:

  1. TM发起并注册全局事务到TC
  2. TM调用分支事务
  3. 分支事务准备执行业务SQL
  4. RM拦截业务SQL,根据where条件查询原始数据,形成快照。
{
  "id": 1, "money": 100
}
  1. RM执行业务SQL,提交本地事务,释放数据库锁。此时 money = 90
  2. RM报告本地事务状态给TC
    二阶段:
  3. TM通知TC事务结束
  4. TC检查分支事务状态
  5. 如果都成功,则立即删除快照
  6. 如果有分支事务失败,需要回滚。读取快照数据({"id": 1, "money": 100}),将快照恢复到数据库。此时数据库再次恢复为100
    流程图:
    image

3.AT与XA的区别

简述AT模式与XA模式最大的区别是什么?

  • XA模式一阶段不提交事务,锁定资源;AT模式一阶段直接提交,不锁定资源。
  • XA模式依赖数据库机制实现回滚;AT模式利用数据快照实现数据回滚。
  • XA模式强一致;AT模式最终一致

标签:事务,快照,Seata,money,流程,XA,模式,RM
From: https://www.cnblogs.com/heimayihao/p/18462977

相关文章

  • 什么是分布式事务?使用Seata有哪些解决方案?Seata的AT模式的执行流程
    什么是分布式事务?简单来说:在分布式系统中出现的事务问题,称为分布式事务。为什么会出现分布式事务:一个分布式事务流程图在这个业务中有3个数据库连接,就没有办法做到全局的事务控制。这就是分布式事务问题分布式事务产生的情况有两种:​ 1.业务跨多个服务实现​ 2.业务跨多......
  • Seata的AT模式的执行流程
    在Seata的事务管理中有三个重要的角色:TC(TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。TM(TransactionManager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。RM(ResourceManager)-资源管理器:管理......
  • 「撸一手好代码」设计模式之单一职责原则
    在软件开发的世界里,随着项目规模的扩大和复杂度的增加,保持代码的清晰和可维护性变得尤为重要。而单一职责原则正是我们手中的一把利剑,帮助我们构建更加健壮、灵活的系统。一、什么是单一职责原则?单一职责原则(SingleResponsibilityPrinciple,简称SRP)是面向对象设计的基本......
  • Seata的AT模式的执行流程
    ·TC(TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。·TM(TransactionManager)-事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。·RM(ResourceManager)-资源管理器:管理分支事务,与TC交谈以注册分支事务......
  • Seata的AT模式的执行流程
    Seata角色术语TC-事务协调者维护全局和分支事务的状态,驱动全局事务提交或回滚,即Seata服务端。TM-事务管理器定义全局事务的范围:开始全局事务、提交或回滚全局事务,在事务发起的客户端。RM-资源管理器管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态......
  • Rust实现单例模式
    前言rust是基于C++实现的,所以对于rust来讲,更适合的是面向过程的设计。不过,仍然可以基于rust采用一些面向对象的设计思想,本文主要讲述如何通过rust语法实现单例模式。一、什么是单例模式?单例模式是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。它常用于需要控......
  • 设计模式学习整理
    学习参考:重构大师创建型模式创建型模式提供了创建对象的机制,能够提升已有代码的灵活性和可复用性。工厂方法模式在父类中提供一个创建对象的方法,允许子类决定实例化对象的类型;实现方式:使用特殊的工厂方法代替对于对象构造函数的直接调用(即使用new运算符),对象仍将通......
  • seata 模式相关
    Seata解决分布式的方案1AT模式数据最终一致AT模式使用起来更加简单,无业务侵入,性能更好AT模式是Seata创新的一种非侵入式的分布式事务解决方案,Seata在内部做了对数据库操作的代理层,我们使用SeataAT模式时,实际上用的是Seata自带的数据源代理DataSourceProxy,Seata在......
  • 尚硅谷rabbitmq2024介绍和工作模式 第4-9节 答疑
    RabbitMQ体系结构介绍重要:对体系结构的理解直接关系到后续的操作和使用BrokerConnectionChannelProducerChannelVirtualHostConsumerChannel---rabbitmq connection里面有很多channel,channel是什么在RabbitMQ中,`channel`(通道)是一个重要的概念。它是在客户端和Rab......
  • 学习之面试题:单例模式
    什么是单例模式?单例模式是一种设计模式,它保证一个类仅有一个实例,并提供一个全局访问点用于访问该实例。其主要目的是控制共享资源的访问。为什么我们需要单例模式?单例模式可以用于控制资源的消耗,避免频繁创建和销毁对象,同时也可以简化系统配置,使得某些类的对象在整个系统......