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

Seata的AT模式的执行流程

时间:2024-10-13 20:46:13浏览次数:1  
标签:事务 Seata 流程 模式 提交 SQL 全局 TC

 · TC (Transaction Coordinator)-事务协调者:维护全局和分支事务的状态,协调全局事务提交或回滚。
 · TM (Transaction Manager)- 事务管理器:定义全局事务的范围、开始全局事务、提交或回滚全局事务。
 · RM (Resource Manager)-资源管理器:管理分支事务,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。
一阶段:
·在业务执行SQL操作前,Seata通过代理数据源拦截SQL语句。
·如果业务SQL时写操作(增、删、改),Seata会解析SQL语义,生成SELECT SQL语句,查询出将要被修改的记录,并保存为“before image”
·执行业务SQL更新数据。
·执行完毕后,再次查询已被修改的记录,并保存为“after image”。
·根据“before image”和“after image”生成UNDO日志记录,并注册分支事务到TC(事务协调器)。
·提交本地事务,释放本地锁资源,但全局锁仍然持有。

二阶段:
·如果全局事务决策为提交,TC会通知RM(资源管理器)删除相应的UNDO日志记录,完成提交。
·如果全局事务决策为回滚,TC会通知RM根据UNDO日志记录进行数据回滚,恢复到事务开始前的状态。

隔离级别

·在数据库本地事务隔离级别读已提交(ReadCommitted)或以上的基础上,Seata(AT模式)的默认全局隔离级别是读未提交(ReadUncommitted)。
·如果应用在特定场景下必须要求全局的读已提交,Seata通过SELECTFORUPDATE语句的代理来实现。
·在执行SELECTFORUPDATE语句时,会申请全局锁,如果全局锁被其他事务持有,则释放本地锁并重试,直到获取全局锁,确保读取的数据是已提交的。

使用的锁机制:

·在一阶段本地事务提交前,需要确保先拿到全局锁,以保证不会发生写冲突。
·如果拿不到全局锁,不能提交本地事务。
·拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放本地锁。

CAP原则:

·Seata的AT模式默认优先保证CP,即一致性和分区容错性。
·在TC不可用时,可以通过配置文件的tm.degrade-check参数或配置中心的service.disableGlobalTransaction属性,从CP系统转换为保证AP的系统,以优先保证服务的可用性。

标签:事务,Seata,流程,模式,提交,SQL,全局,TC
From: https://www.cnblogs.com/handsomelt/p/18462922

相关文章

  • 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......
  • 学习之面试题:单例模式
    什么是单例模式?单例模式是一种设计模式,它保证一个类仅有一个实例,并提供一个全局访问点用于访问该实例。其主要目的是控制共享资源的访问。为什么我们需要单例模式?单例模式可以用于控制资源的消耗,避免频繁创建和销毁对象,同时也可以简化系统配置,使得某些类的对象在整个系统......
  • 设计模式-责任连
    packagecom.example.cor.chain;importcom.example.cor.filter.Filter;importjavax.servlet.Servlet;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjava.io.IOException;publicclas......
  • 设计模式分类和软件设计原则
    1.设计模式分类类别名称描述设计模式创建型模式怎样创建对象,将对象的创建与使用分离单例、原型、工厂方法、抽象工厂、建造者结构型模式将类或对象按某种布局组成更大的结构代理、适配器、桥接、装饰、外观、亨元、组合行为型模式类或对象之间怎样相互协作......
  • 相机曝光的两种模式
    相机的曝光模式相机帧率和曝光时间的关系相机的图像采集包括曝光(Exposure)和读出(Readout)两部分曝光又分为非重叠(non-overlapped)曝光和重叠(overlapped)曝光两种在非重叠(“non-overlapped”)模式中,每个图像采集的周期中,相机在下一个图像采集开始前,均要完成曝光/......
  • AI 推理能力大“翻车”!苹果最新论文:LLM只是复杂的模式匹配,而不是真正的逻辑推理
    内容提要大语言模型真的可以推理吗?LLM都是“参数匹配大师”?苹果研究员质疑LLM推理能力,称其“不堪一击”!文章正文苹果的研究员MehrdadFarajtabar等人最近发表了一篇论文,对大型语言模型(LLM)的推理能力提出了尖锐的质疑,他认为,LLM的“推理”能力,其实只是复杂的模式匹......