首页 > 其他分享 >分布式事务(二):Seata概述

分布式事务(二):Seata概述

时间:2024-02-07 16:44:22浏览次数:24  
标签:回滚 Seata XA 事务 模式 概述 TCC 分布式

  Seata官方文档地址:https://seata.apache.org/zh-cn/

1、Seata引入

 0

用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:

  仓储服务:对给定的商品扣除仓储数量。

  订单服务:根据采购需求创建订单。

  帐户服务:从用户帐户中扣除余额。

  在上述架构图中有仓储服务、订单服务、账户服务,用户购买商品时,每个服务内部数据一致性可由本地事务来保证,全局数据的一致性问题就需要用Seata来解决。

2、什么是Seata

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

3、Seata的核心概念

  Seata分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,TM和RM(Client端)由业务系统集成。

 0

3.1、TM - 事务管理器(事务创建)

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

  用于创建和决议事务结果的实体,一般集成于业务调用链路的上游。

3.2、RM - 资源管理器(分支事务)

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

  其中,TC为单独部署的Server服务端,TM 和 RM 为嵌入到应用中的Client客户端。

  用于管理资源的实体,一般情况下等同于微服务中的提供方(provider),管理其所在服务中的资源,如数据库资源等。

3.3、TC - 事务协调者(事务决议)

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

  Seata 中用于2pc方式的事务模式统一协调事务的实体(SAGA除外),其可由事务管理者驱动或自身驱动进行事务的二阶段行为.

3.3.1、Commit

  Seata 中当事务管理器决议为提交时,TC才会进行对事务的二阶段提交行为下发,如TCC模式中的confirm,AT模式的undolog delete,XA模式的XA Commit。

3.3.2、Rollback

  Seata 中当事务管理器决议为回滚时,TC会进行对事务的二阶段回滚行为下发,如TCC模式中的cancel,AT模式的undo,XA模式的XA Rollback。

3.3.3、TimeoutRollback

  Seata 中当事务管理器创建事务时指定的Timeout时间到达后还未决议时,TC会主动将已超时的事务进行超时回滚,其超时行为等同上述Rollback行为。

4、分布式事务生命周期

  0

· TM 请求 TC 开启一个全局事务。TC 会生成一个 XID 作为该全局事务的编号

  XID,会在微服务的调用链路中传播,保证多个微服务的子事务关联在一起

· RM 请求 TC 将本地事务注册为全局事务的分支事务,通过全局事务的 XID 进行关联

· TM 请求 TC 告诉 XID 对应的全局事务是进行提交还是回滚

· TC 驱动 RM 们将 XID 对应的自己的本地事务进行提交还是回滚

5、Seata的事务模式

5.1、AT模式

  AT模式是一非侵入式的分布式事务解决方案,Seata在内部做了对数据库操作的代理层。使用Seata AT模式实际上用的是Seata自带的数据源代理 DataSourceProxy,Seata在这层代理中加入了很多逻辑,比如插入回滚undo_log日志、检查全局锁等。

  AT模式 提供无侵入自动补偿的事务模式,目前已支持MySQL、Oracle、PostgreSQL、TiDB、MariaDB、DaMeng、SQLServer。

5.1.1、整体机制

两阶段提交协议:

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

  二阶段:提交异步化,非常快速地完成;回滚通过一阶段的回滚日志进行反向补偿。

5.1.2、基于数据库实现

AT模式基于 支持本地 ACID 事务的关系型数据库:

  一阶段 prepare 行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录

  二阶段 commit 行为:马上成功结束,自动 异步批量清理回滚日志

  三阶段 rollback 行为:通过回滚日志,自动 生成补偿操作,完成数据回滚

5.2、TCC模式

  一个分布式的全局事务,整体是 两阶段提交 的模型。全局事务是由若干分支事务组成的,分支事务要满足 两阶段提交 的模型要求,即需要每个分支事务都具备自身的两阶段。

阶段一 prepare 行为
阶段二 commit 或 rollback 行为

 原理图如下:

 0

  根据两阶段行为模式的不同,分支事务可划分为 Automatic (Branch) Transaction Mode 和 TCC (Branch) Transaction Mode。

5.2.1、TCC模式

TCC 模式,不依赖于底层数据资源的事务支持。

  一阶段 prepare 行为:调用 自定义 的 prepare 逻辑。

  二阶段 commit 行为:调用 自定义 的 commit 逻辑。

  二阶段 rollback 行为:调用 自定义 的 rollback 逻辑。

  TCC 模式,是指支持把 自定义 的分支事务纳入到全局事务的管理中。

5.2.2、优缺点

  优势:TCC完全不依赖底层数据库,能够实现跨数据库、跨应用资源管理,可以提供给业务方更细粒度的控制;

  缺点:TCC是一种侵入式的分布式事务解决方案,需要业务系统自行实现 Try、Confirm、Cancel 三个操作,对业务系统有着非常大的入侵性,设计相对复杂。

5.2.3、使用场景

  TCC模式是高性能分布式事务解决方案,适用于核心系统等对性能有很高要求的场景。

5.2.4、TCC模式整体机制

  在两阶段提交协议中,资源管理器(RM,Resource Manager)需要提供 prepare、commit 和 rollback 三个操作;而事务管理器(TM,Transaction Manager)分两阶段协调所有资源管理器,在第一阶段询问所有资源管理器 prepare 是否成功,若所有资源均 prepare 成功则在第二阶段执行所有资源的 commit 操作,否则在第二阶段执行所有资源的 rollback 操作,保证所有资源的最终状态是一致的,要么全部提交要么全部回滚。

  TCC是资源管理器的一种服务化的实现,TCC是一种比较成熟的分布式事务解决方案,可以用于解决跨数据库、跨服务业务操作的数据一致性问题。TCC其 Try、Confirm、Cancel 三个方法均由业务编码实现,所以 TCC 可以被称为是服务化的资源管理器。

  TCC的 Try 操作作为一阶段,负责资源的检查和预留;Confirm 操作作为二阶段提交操作,执行真正的业务;Cancel 是二阶段回滚操作,执行预留资源的取消,使资源回到初始状态。

5.3、Saga模式

  为长事务提供有效的解决方案,提供编排式与注解式。

 0

  Saga模式是SEATA提供的长事务解决方案,在Saga模式中,业务流程中每个参与者都提交本地事务,当出现某一个参与者失败则补偿前面已经成功的参与者,一阶段正向服务和二阶段补偿服务都由业务开发实现。

5.3.1、适用场景

  业务流程长、业务流程多;

  参与者包含其他公司或遗留系统服务,无法提供 TCC 模式要求的三个接口。

5.3.2、优缺点

  缺点:不保证隔离性

  优点:一阶段提交本地事务,无锁,高性能;事件驱动架构,参与者可异步执行,高吞吐;补偿服务易于实现

5.3.3、Saga的实现

  基于状态机引擎的Saga实现,目前SEATA提供的Saga模式是基于状态机引擎来实现的,整体机制如下:

  0

  1、通过状态图来定义服务调用的流程并生成json状态语言定义文件

  2、状态图中一个节点可以是调用一个服务,节点可以配置它的补偿节点

  3、状态图json由状态机引擎驱动执行,当出现异常时状态引擎反向执行已成功节点对应的补偿节点将事务回滚。(异常发生时是否进行补偿也可由用户自定义决定)

  4、可以实现服务编排需求,支持单向选择、并发、子流程、参数转换、参数映射、服务执行状态判断、异常捕获等功能。

5.4、XA模式

  支持已实现XA接口的数据库XA模式,目前已支持MySQL、Oracle和MariaDB。

  XA 规范 是 X/Open 组织定义的分布式事务处理(DTP,Distributed Transaction Processing)标准。Seata XA 模式是利用事务资源(数据库、消息服务等)对 XA 协议的支持,以 XA 协议的机制来管理分支事务的一种事务模式。

  0

5.4.1、优缺点

  优点 => 与 Seata 支持的其他事务模式不同,XA协议要求事务资源本身提供对规范和协议的支持,所以事务资源(如数据库)可以保障从任意视角对数据的访问有效隔离,满足全局数据一致性。此外的一些优势还包括:1、业务无侵入:和 AT 一样,XA 模式将是业务无侵入的,不给应用设计和开发带来额外负担;2、数据库的支持广泛:XA协议被主流关系型数据库广泛支持,不需要额外的适配即可使用。

  缺点 => 使用于想要迁移到 Seata 平台基于 XA 协议的老应用,使用 XA 模式将更平滑,还有 AT 模式未适配的数据库应用。

5.4.2、整体机制

·执行阶段

  可回滚:业务 SQL 操作放在 XA 分支中进行,由资源对 XA 协议的支持来保证 可回滚。

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

·完成阶段

  分支提交:执行 XA 分支的 commit

  分支回滚:执行 XA 分支的 rollback

 

标签:回滚,Seata,XA,事务,模式,概述,TCC,分布式
From: https://www.cnblogs.com/RunningSnails/p/18011053

相关文章

  • pytorch 多机单卡分布式训练配置笔记.18010304
    pytorch多机单卡分布式训练配置笔记记录通过torchrun进行pytorch的分布式训练配置方法,示例代码为基本的分布式训练框架代码,无实际功能环境操作系统:Ubuntu22.04Python环境:anaconda23.11.0、Python3.8pytorch:2.1.2编写代码将代码保存为main.py模型训练代码写到train函数......
  • tensorflow 2.x 多机单卡 分布式训练配置笔记.18010232
    tensorflow2.x多机单卡分布式训练配置笔记tensorflow2.x多机单卡demo代码演示。配置笔记多机多卡属于tensorflow的tf.distribute.MultiWorkerMirroredStrategy策略,下面为详细的环境配置和demo代码环境、版本操作系统:Ubuntu22.04Python环境:anaconda23.11.0、Python......
  • 为什么要用redis分布式锁
    为什么我们做分布式使用Redis? 绝大部分写业务的程序员,在实际开发中使用Redis的时候,只会SetValue和GetValue两个操作,对Redis整体缺乏一个认知。这里对 Redis常见问题做一个总结,解决大家的知识盲点。 1、为什么使用Redis 在项目中使用Redis,主要考虑两个角度:......
  • 分布式事务Seata
    TC (TransactionCoordinator)-事务协调者:维护全局和分支事务的状态,驱动全局事务提交或回滚。TM (TransactionManager)-事务管理器:定义全局事务的范围,开始全局事务、提交或回滚全局事务。RM (ResourceManager)-资源管理器:管理分支事务处理的资源(Resource),与TC......
  • Unity Animation动画系统概述
    一、UnityAnimation动画系统基本介绍unity提供了一套非常强大灵活且成熟的动画系统,不论是2d还是3d动画都有相应的组件和接口提供给开发者使用,不过这篇文章主要还是讲解3D部分的动画系统。我们在游戏开发时时常需要角色动起来,除了位置上的移动之外,我们还需要匹配角色的行为或玩......
  • 防止超卖主要是通过分布式锁实现
    加分布式锁其实前面介绍过的加唯一索引或者加防重表,本质是使用了数据库的分布式锁,也属于分布式锁的一种。但由于数据库分布式锁的性能不太好,我们可以改用:redis或zookeeper。鉴于现在很多公司分布式配置中心改用apollo或nacos,已经很少用zookeeper了,我们以redis为例介绍分布式锁。......
  • 选 300 平米别墅还是 90 平米小平层?一文带你读懂 PolarDB 分布式版集分一体化
    作者:楼江航(七锋) 日前,在阿里云PolarDB开发者大会上,阿里云PolarDB分布式产品部负责人黄贵发表了《分布式的PolarDB:分布式的能力,一体化的体验》主题演讲。黄贵表示,PolarDB分布式版(PolarDBforX-scale,简称“PolarDB-X”)早期一直聚焦分布式形态,我们在2023年10月公共云......
  • 分布式文件系统---Minio
    什么是分布式文件系统​ 分布式文件系统(DistributedFileSystem,DFS)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连;或是若干不同的逻辑磁盘分区或卷标组合在一起而形成的完整的有层次的文件系统。DFS为分......
  • 作为国产深度学习框架中分布式计算特性最强大的OneFlow的最大缺点是什么?
    OneFlow是国产深度学习框架中分布式计算特性最强大的,因为其原生支持分布式特性,世界上的历史中的深度学习框架唯一可以做到这一点的也就只有Google的TensorFlow和Jax了,虽然有人说Google的分布式最强也有人说Google的分布式一般,但是毋庸置疑的是OneFlow一定是国产深度学习框架中分布......
  • 设计模式-概述
    前言软件开发流程大致分为以下3大流程需求分析程序分析和设计程序开发设计模式是程序员在设计程序阶段,重要的参考依据,可以帮我们设计出更加松耦合、易于扩展的程序; 设计模式概念设计模式是针对软件设计中普遍存在的(反复出现)的各种问题,所提出的解决方案。每1个设计模式......