首页 > 编程语言 >Seata源码结构及事务模式介绍

Seata源码结构及事务模式介绍

时间:2023-01-29 18:12:10浏览次数:43  
标签:事务 Seata XA 回滚 源码 全局 分支

1.Seata是什么

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2.Seata体系中的三个组件

2.1 三个组件

Seata 内部定义了 3个模块来处理全局事务和分支事务的关系和处理过程,这三个组件分别是:

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

TM (Transaction Manager) - 事务管理器:定义全局事务的范围:开始全局事务、提交或回滚全局事务。

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

2.2 执行步骤

整个全局事务的执行步骤如下:

  1. TM 向 TC 申请开启一个全局事务,TC 创建全局事务后返回全局唯一的 XID,XID 会在全局事务的上下文中传播;
  2. RM 向 TC 注册分支事务,该分支事务归属于拥有相同 XID 的全局事务;
  3. TM 向 TC 发起全局提交或回滚;
  4. TC 调度 XID 下的分支事务完成提交或者回滚。

3.Seata源码体系

整体结构

源码基本同官方1.5.2-1.6.1版本。

4.Seata事务模式介绍

4.1 Seata AT 模式

两阶段提交协议的演变:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

二阶段

提交异步化,非常快速地完成。

回滚通过一阶段的回滚日志进行反向补偿。

4.2 Seata TCC 模式

整体是两阶段提交的模型。

全局事务是由若干分支事务组成的,分支事务要满足两阶段提交的模型要求,即需要每个分支事务都具备自己的:

一阶段 prepare 行为

二阶段 commit 或 rollback 行为

4.3 Seata Saga 模式

目前Seata提供的Saga模式是基于状态机引擎来实现的,机制是:

  • 通过状态图来定义服务调用的流程并生成 json 状态语言定义文件。
  • 状态图中一个节点可以是调用一个服务,节点可以配置它的补偿节点。
  • 状态图 json 由状态机引擎驱动执行,当出现异常时状态引擎反向执行已成功节点对应的补偿节点将事务回滚。
  • 可以实现服务编排需求,支持单项选择、并发、子流程、参数转换、参数映射、服务执行状态判断、异常捕获等功能。

4.4 Seata XA 模式

利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种 事务模式。

执行阶段

  • 可回滚:业务 SQL 操作放在 XA 分支中进行,由资源对 XA 协议的支持来保证 可回滚。
  • 持久化:XA 分支完成后,执行 XA prepare,同样,由资源对 XA 协议的支持来保证持久化(即,之后任何意外都不会造成无法回滚的情况)。

完成阶段

  • 分支提交:执行 XA 分支的 commit
  • 分支回滚:执行 XA 分支的 rollback

标签:事务,Seata,XA,回滚,源码,全局,分支
From: https://www.cnblogs.com/zjfjava/p/17073446.html

相关文章

  • eureka源码分析环境准备
    一、工具准备:eureka源码,下载地址:https://github.com/Netflix/eureka/tree/v1.7.2;gradle安装配置环境变量,自行百度;IDEA2018.1版本(其他版本不一定兼容)二、......
  • IdentityServer4源码解析_2_元数据接口
    1|0目录IdentityServer4源码解析_1_项目结构IdentityServer4源码解析_2_元数据接口IdentityServer4源码解析_3_认证接口IdentityServer4源码解析_4_令牌发放接口Id......
  • 事务面试题
    1.说下事务的ACID原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生,一致性(Consistency):事务前后数据的完整性必须保持......
  • 数据访问层服务自动注册类封装和使用源码-AutoFac
    项目使用三层结构RepositoryIocFactoryusingSystem;usingSystem.Reflection;usingAutofac;namespaceCommonHelper.AutoInject.Repository{publicclassRe......
  • spring 源码浅析
    AliasRegistry:定义对alias的简单增删改查SimpleAliasRegistry:主要使用map作为alias的缓存,并对接口AliasRegistry进行实现SingletonBeanRegistry:定义对单例的注册及获取Bean......
  • SQLSERVER 事务日志的 LSN 到底是什么?
    SQLSERVER事务日志的LSN到底是什么? 一:背景1.讲故事大家都知道数据库应用程序 它天生需要围绕着数据文件打转,诸如包含数据的 .mdf,事务日志的 .ldf,很多时候深......
  • MySQL事务Read Committed隔离级别的数据可见性
    预先创建一张表test,表中只有一个字段state。createtabletest(stateintnotnull)engine=InnoDBcharset=utf8mb4;在两个终端中分别开启两个事务:事务的隔离......
  • Java安全 - RMI源码分析
    RMI远程服务创建流程分析1、远程对象创建过程首先步入对象的构造方法下一步这里步入了父类UnicastRemoteObject的构造函数,传入一个参数port,作用是将远程对象随即发......
  • Spring源码解析
    publicvoidrefresh()throwsBeansException,IllegalStateException{synchronized(this.startupShutdownMonitor){StartupStepcontextRefres......
  • 网络安全学习之网站源码相关知识
    架构了解 ·要知道网站的目录结构:后台目录,模板目录,数据库目录,数据库配置文件 ·要了解网站是由什么脚本编写的,常见的脚本:asp,java,javascrip,python,php,aspx。掌握相......