【2.2 分布式事务(Seata)】一文介绍分布式事务入门知识和Seata框架

一、Seata 简介

  • Seata 是一个遵循 Apache 2.0 协议的免费分布式事务解决方案,由阿里巴巴公司开源。
  • Seata的目标是为分布式事务处理提供轻量级和简单的解决方案。
  • Seata 提供了一种简单的方式来解决分布式事务的难点,例如保证数据一致性和事务的隔离性。
  • Seata 为分布式事务处理提供了一种方便的方式,使得应用程序可以使用传统的事务模型。
  • Seata是一个优秀的分布式事务解决方案,可以为应用程序提供快速、简单和可靠的分布式事务处理。
  • Seata是阿里巴巴的一个开源事务解决方案,旨在解决分布式事务的一致性问题。
  • Seata 可以有效地解决分布式系统中的事务一致性问题。
  • 通过 TC、TM 和 RM 三个核心组件以及一系列辅助组件的协同工作,Seata实现了分布式事务的管理和控制,确保了数据的一致性和正确性。
  • 在使用 Seata 构建分布式系统时,Seata会自动为我们管理并控制事务的提交和回滚,从而保证数据的一致性。

二、Seata 的三种模式

目前使用的流行度情况:AT > TCC > Saga

2.1 XA模式

Seata 支持 XA 模式下的分布式事务,并通过对数据源进行包装实现。

XA 模式则是采用两阶段提交协议(2PC),通过协调器来实现多个数据库的事务一致性,需要依赖于数据库的XA接口实现。在事务提交的过程中,如果有任何一个参与者数据库崩溃或者网络通信异常,整个事务将无法完成,需要手动进行回滚操作。

2.2 概述

一个分布式的全局事务,整体是两阶段提交的模型。
在这里插入图片描述

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

根据两阶段行为模式的不同,我们将分支事务划分为

  • Automatic(Branch)Transaction Mode
  • TCC(Branch)Transaction Mode。

2.2.1 TCC模式

TCC 模式则是将一个大事务拆分为三个小事务:尝试、确认和取消。
Seata 支持 TCC 模式下的分布式事务。
在 TCC 模式下,应用程序可以以更细粒度的方式管理分布式事务的处理。
TCC模式,不依赖于底层数据资源的事务支持。
TCC模式,指支持把自定义的分支事务纳入到全局事务的管理中心。

阶段名 别名 原理与分工
尝试阶段 一阶段、prepare行为 调用自定义的prepare逻辑,所有的业务检查和资源预留
确认阶段 二阶段commit行为 调用自定义的commit逻辑,真正的业务执行
取消阶段 二阶段rollback行为 调用自定义的rollback逻辑,资源释放

2.2.2 AT模式【最常见】

AT 模式是最常见的模式
Seata 支持 AT 模式下的分布式事务
Seata 可以使用像 JDBC 这样的底层数据源和框架实现。

原理

是通过数据库锁实现事务的提交和回滚。当一个事务涉及多个数据库操作时,会将这些操作放到同一个事务中,如果有任何一个操作失败,整个事务也将失败,并且回滚之前的所有操作。

前提

基于支持本地ACID事务的关系型数据库;
Java应用,通过JDBC访问数据库。

整体机制

两阶段提交协议的演变:

一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源;
二阶段:
① 提交异步化,非常快速地完成;
② 回滚通过一阶段的回滚日志进行反向补偿。

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

一阶段prepare行为:在本地事务中,一并提交业务数据更新和相应回滚日志记录;
二阶段commit行为:马上成功结束,自动异步批量清理回滚日志;
二阶段rollback行为:通过回滚日志,自动生成补偿操作,完成数据回滚。

写隔离

一阶段本地事务提交前,需要确保先拿到全局锁;
拿不到全局锁,不能提交本地事务;
拿全局锁的尝试被限制在一定范围内,超出范围将放弃,并回滚本地事务,释放

三、 Seata 的核心组件

它包括三个核心组件:TC(事务协调器)、TM(事务管理器)和RM(资源管理器),以及一些辅助组件:AT、TCC、Saga。

在这里插入图片描述

Seata 的分布式事务处理方案可以分为四个主要的协调器:

组件 协调器 组件解释
TC 协调器,事务协调器 分布式事务Seata 的核心组件,作用:协调所有参与者的工作并处理分布式事务的提交与回滚,负责管理和协调整个分布式事务的处理过程,它可以管理资源的注册和协调多个 RM 的工作。TC接收到全局事务的注册请求后,将会为该事务分配一个全局唯一的 XID。在全局事务的执行过程中,TC还会维护所有参与者的状态,并在全局事务执行成功时提交该事务,否则回滚该事务。
TM 协调器,事务管理器 分布式事务Seata 的核心组件,作用:管理分支事务,包括分支事务的创建、提交、回滚等操作。TM还可以将全局事务进行拆分,以支持巨大的数据集和高并发的访问。当应用程序需要进行分布式事务处理时,TM 负责将所有的操作绑定到一个事务之中,并确保事务处理的完整性和可靠性。
RM 协调器,资源管理器 RM用于管理本地事务的提交和回滚,利用本地资源管理器来管理资源的控制。RM会为每一个事务分配一个本地唯一的 TXID,并用该 TXID 来协调资源的处理。RM 负责管理应用程序中的下层资源,例如数据库、消息队列和缓存等。当需要进行分布式事务处理时,RM 将会向 TC 注册资源,并处理 RM 的各种事务请求。
AT AT 协调者,自动提交模式 在 AT 模式下,应用程序必须执行每个操作时将其更新到中央协调器中。当分布式事务需要撤销时,AT 协调者将根据操作顺序撤销所有的操作。

四、 Seata 的工作原理

下面详细看一下 Seata 的工作原理

4.1 第一步:全局事务的开始

当一个应用程序启动时,Seata会为该应用程序创建一个全局事务,并分配一个全局唯一的 XID。
该全局事务包含多个分支事务(即 RM),并由 TC 进行协调管理。

4.2 第二步:分支事务的注册

在分支事务要参与全局事务之前,它需要先向 TC 注册。当 RM 向 TC 发送“注册”请求时,TC会为该分支事务分配一个本地唯一的 TXID,并将该 TXID 返回给 RM。此时,RM 就可以使用该 TXID 参与经全局事务控制的本地事务处理了。

4.3 第三步:分支事务的执行

在分支事务的执行过程中,RM会监控其本地事务的执行,并将执行结果上报给 TC。在此期间,Seata会对全局事务进行管理和控制,以确保其执行一致性。若所有分支事务执行成功,则 TC 认为全局事务执行成功,否则 TC 回滚整个全局事务。

4.4 第四步:全局事务的提交或回滚

当所有分支事务执行结束后,TC 会根据相应的协调规则,决定是提交还是回滚该全局事务。如果 TC 决定提交,则 Seata 会将该全局事务提交给 TM 进行处理。TM根据全局事务信息,通知相应 RM 提交本地事务。如果 TC 决定回滚,则 Seata 将调用 RM 回滚所有分支事务及全局事务。

五、Seata 的功能特性与优势

Seata 是一个具有以下优点的分布式事务解决方案,下面是 Seata 的主要功能特性:

5.1 高可用性和数据一致性

Seata 针对分布式事务的处理提供了可靠性和数据一致性方面的保障,能够在任何时候保证分布式事务的完整性和数据的一致性。 Seata 能够在可扩展的垂直和水平方向上进行扩展,并支持在各种硬件和操作系统平台上运行。

5.2 容错处理

Seata 提供高可用性的分布式事务处理,并支持在发生异常时进行容错处理。

5.3 简单性

Seata 的使用非常简单,可以在应用程序的工作流中轻松地实现分布式事务。

5.4 高性能

Seata 的分布式事务处理具有高性能,可以在快速和可靠的情况下处理大量的分布式事务请求。

5.5 开源社区支持

Seata 是一种免费的开源软件,有着强大的开源社区支持和广泛的用户基础。

5.6 与 Spring 框架的集成

Seata 可以很容易地集成到 Spring 应用程序中,这对于需要进行分布式事务处理的应用程序非常有益。

1、引入事务的依赖,

2、引入注解:@Transaction

Seata 的AT模式????

Undo日志,回滚日志表。

在这里插入图片描述

TCC模式是什么?

猜你喜欢

转载自blog.csdn.net/wstever/article/details/131185126
今日推荐