当前位置: 首页 > news >正文

分布式事务框架--Seata(AT模式)的原理

原文网址:分布式事务框架--Seata(AT模式)的原理-CSDN博客

简介

本文介绍分布式事务框架--Seata(AT模式)的原理。

官网网址

Seata AT 模式 | Apache Seata

大致流程

由两阶段提交协议演化而来,也是分为两个阶段,如下:

一阶段

  1. 解析UPDATE语句,将回滚补偿信息放入undo_log(回滚日志)
  2. 在同一个事务里提交业务数据和回滚日志(undo_log)
  3. 释放本地锁和连接资源。

二阶段

  1. 若成功:异步提交,清理undo_log相关的补偿信息。
  2. 若失败:回滚,通过一阶段的ungo进行反向补偿。

角色

三种角色:

TC(Transaction Manager):事务协调者,维护全局和分支事务的状态,驱动全局事务提交或回滚。

TM(Transaction Manager): 事务管理器,定义全局事务的范围,开始全局事务、提交或回滚全局事务。加了@GlobalTransaction注解那个才是TM。

RM(Resource Manager ) :资源管理器,管理分支事务处理的资源( Resource ),与 TC 交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。被TM调用的服务会有RM。

其中,TC工作在Seata服务端,TM和RM工作在Seata的客户端(业务的微服务端)。

详细流程

以一个示例来说明整个 AT 分支的工作过程。

业务表:product表。

原数据:

idnamesince
1xxx2014

 AT 分支事务的业务逻辑:

update product set name = 'yyy' where name = 'xxx';

一阶段

  1. 解析 SQL:得到 SQL 类型(UPDATE),表(product),条件(where name = 'xxx')等相关的信息。
  2. 查询前的镜像:根据解析得到的条件信息,生成查询语句,定位数据。
  3. 执行业务 SQL:更新这条记录的 name 为 'yyy'。
  4. 查询后的镜像:根据前镜像的结果,通过 主键 定位数据。
  5. 插入回滚日志:把前后镜像数据以及业务 SQL 相关的信息组成一条回滚日志记录,插入到 UNDO_LOG 表中。
  6. 提交前,向 TC 注册分支:申请 product 表中,主键值等于 1 的记录的 全局锁 。
  7. 本地事务提交:业务数据的更新和前面步骤中生成的 UNDO LOG 一并提交。
  8. 将本地事务提交的结果上报给 TC。

二阶段(提交​)

  1. 分支收到 TC 的提交请求,把请求放入一个异步任务的队列中,马上返回提交成功给 TC。
  2. 异步任务批量地删除相应 UNDO LOG 记录。

二阶段(回滚​)

  1. 分支收到 TC 的回滚请求,开启一个本地事务。
  2. 通过 XID 和 Branch ID 查找到相应的 UNDO LOG 记录。
  3. 数据校验:拿 UNDO LOG 中的后镜像与当前数据比较,如果相同,则继续执行。
    (如果不同,说明数据被当前全局事务之外的动作做了修改。这时要根据配置策略来做处理)
  4. 根据 UNDO LOG 中的前镜像和业务 SQL 的相关信息生成并执行回滚的语句:​update product set name = 'xxx' where id = 1;
  5. 提交本地事务。并把本地事务的执行结果(即分支事务回滚的结果)上报给 TC。

相关文章:

  • 啥是目标文件?目标文件里面有什么?
  • CAS单点登录(第7版)21.可接受的使用政策
  • ai数字人分身系统开发源码saas化
  • 今日写题04work
  • 为何STL里stack queue没有迭代器
  • .NET版Word处理控件Aspose.Words教程:使用 C# 删除 Word 中的空白页
  • AI 编程工具—Cursor 进阶篇 数据分析
  • 【java】深拷贝和浅拷贝的区别
  • ISO9001质量管理体系 | 设计和开发控制程序
  • LeetCode字符串相关算法题(1)【C语言版】
  • PyQt6/PySide6 线程间通信(Signal/Slot)
  • Hasleo Backup Suite v5.0.2.3 多语种便携版:全能型数据守护神器详解
  • DockerFile优化镜像体积
  • 吸烟(抽烟)检测和识别1:吸烟(抽烟)数据集说明(含下载链接)
  • Java基础知识总结(四十八)--TCP传输、TCP客户端、TCP服务端
  • 蓝桥杯---颜色分类(leetcode第75题)题解
  • 非谓语动词三驾马车
  • .NET 9.0 的 Blazor Web App 项目,Bootstrap Blazor 全局异常 <ErrorLogger> 使用备忘
  • 【计算机网络】传输层数据段格式
  • webassembly009 transformers.js 网页端侧推理 whisper-web
  • 巴西总统卢拉将访华
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 850亿元!2025年中央金融机构注资特别国债(一期)拟第一次续发行
  • 牛市早报|国家发改委:今年将推出约3万亿元优质项目,支持民营企业参与
  • 人民日报整版调查:中小学春秋假,如何放得好推得开?
  • 美英达成贸易协议,美股集体收涨