seata专题

什么是seata     

          Seata是一个开源的分布式事务解决方案,旨在简化分布式事务的实现。它提供了一种简单而强大的方式来管理分布式事务,在分布式应用程序中保持数据的一致性和可靠性。

         在传统的单体应用程序中,数据库事务可以很容易地实现。但是,在分布式系统中,事务管理可以变得更加复杂。分布式事务要求跨多个服务协调和管理事务操作,确保所有参与者的操作要么全部成功,要么全部回滚以保持一致性。

       Seata采用了一种两阶段提交(2PC)的协议来实现分布式事务。它包含三个核心组件:事务协调器(Transaction Coordinator,TC)、事务管理器(Transaction Manager,TM)和资源管理器(Resource Manager,RM)。

事务协调器(TC):负责协调和管理分布式事务的执行。事务管理器(TM)是分布式事务的入口点,负责事务的发起和提交。

资源管理器(RM):管理着事务涉及的所有资源,包括数据库、消息队列、缓存等。

为什么需要seata

           Seata 是一种分布式事务解决方案,它用于解决分布式系统中的事务一致性问题。在分布式系统中,由于数据分散在不同的节点上,当一个业务操作需要跨多个节点时,需要保证这些节点上的数据操作要么全部成功,要么全部回滚,以保持数据的一致性。

使用 Seata 可以带来以下好处:

  • 保持数据的一致性:Seata 提供了分布式事务管理的机制,能够确保跨多个节点的数据操作要么全部成功,要么全部回滚,保持数据的一致性。

  • 提高系统性能:Seata 通过优化事务提交和回滚的过程,减少了分布式事务的开销,提高了系统的性能。

  • 提供强一致性和高可用性:Seata 使用了一套高效的协调机制,能够在分布式环境下提供强一致性和高可用性的服务。

  • 简化开发和维护:Seata 提供了一套简单易用的 API,开发人员可以很方便地在现有的业务系统中集成分布式事务管理功能,减少了开发和维护的复杂性。

  分布式事务和Spring声明式事务的主要区别     

         分布式事务是指跨多个数据源或服务的事务操作,通常涉及多个数据库或多个微服务的操作。与单个数据库的事务不同,分布式事务需要在多个参与方之间保持数据的一致性和完整性。而Spring声明式事务只针对单个数据库的事务操作。

       在分布式系统中,每个项目通常都会有自己的数据库事务,但是当多个项目需要进行跨多个数据库或服务的事务操作时,就需要引入分布式事务框架,如Seata。Seata是一个开源的分布式事务解决方案,可以提供分布式事务的管理和控制,保证数据的一致性和完整性。

       通过Seata,可以在多个参与方之间进行协调和同步,实现分布式事务的操作。Seata采用了两阶段提交的方式来保证分布式事务的一致性,第一阶段为事务的准备阶段,各个参与方会执行本地事务,并将事务的执行结果提交给Seata;第二阶段为事务的提交阶段,Seata会根据各个参与方的提交结果来进行最终的事务提交或回滚。

Seata的构成 

     Seata的主要构成包括:

  1. 事务协调器(TC):事务协调器是Seata的核心组件,负责协调全局事务的提交和回滚。它通过与业务逻辑代码进行交互,收集各个分支事务的执行结果,并在所有分支事务执行成功时提交全局事务,任何分支事务执行失败时回滚全局事务。

  2. 事务管理器(TM):事务管理器负责全局事务的开启、提交和回滚。在Seata中,每个微服务都会有一个事务管理器,它通过与事务协调器交互,实现全局事务的控制。

  3. 资源管理器(RM):资源管理器负责管理分支事务的提交和回滚。在Seata中,每个微服务都会有一个资源管理器,它与事务协调器和事务管理器通信,协调分支事务的执行和结果反馈。

  4. 事务日志存储(Storage):事务日志存储模块负责存储事务的相关日志信息。Seata支持多种事务日志存储方案,包括数据库存储、文件存储等。事务日志存储模块提供了事务日志的写入和读取接口,用于支持事务的持久化和恢复。

  5. 全局事务ID生成器(AT):全局事务ID生成器负责生成全局唯一的事务ID。每个全局事务在启动时都会被分配一个唯一的事务ID,用于标识该事务的执行过程。

  6. 注册中心(Registry):注册中心负责管理Seata的各个组件的注册和发现。它提供了服务注册和发现的功能,使得各个组件能够找到对应的服务进行通信。

Seata的运行原理

      Seata的运行原理可以分为三个关键步骤:全局事务的发起、全局事务的提交与回滚、分支事务的提交与回滚。

  1. 全局事务的发起: 当一个业务需要跨多个服务进行数据更新时,首先需要创建一个全局事务。发起者(通常是客户端或者服务端)向Seata发起请求,Seata为该请求生成一个唯一的全局事务ID,并将该ID与该请求绑定。全局事务ID被传递到所有涉及的服务中,以保证这些服务在执行业务操作时,都能够参与到该全局事务中。

  2. 全局事务的提交与回滚: 在全局事务内,每个参与者都是一个分支事务的发起者。当每个参与者需要对数据进行更新时,它们会向Seata发起请求,Seata为该请求生成一个唯一的分支事务ID,并将该ID与全局事务ID进行关联。参与者执行实际的业务操作,并将分支事务ID和操作结果返回给Seata。当所有参与者都完成了业务操作后,全局事务的提交或者回滚就会被触发。

  3. 分支事务的提交与回滚: 当全局事务被提交时,Seata会向每个参与者发送提交请求。参与者根据传递的分支事务ID,执行相应的提交操作。如果全局事务被回滚,Seata会向每个参与者发送回滚请求,参与者根据传递的分支事务ID,执行相应的回滚操作。这样,全局事务的状态就能够被正确地更新。

        此外,Seata还提供了分布式事务恢复的机制。当系统发生异常情况导致分布式事务未能正常完成时,Seata会通过日志进行重试和恢复操作,确保事务的正确性。

         AT模式为例讲解原理

当account操作失败时,要让已经操作完成的order撤销操作,也要让stroage撤销操作

   

AT模式运行过程

   1.事务的发起方(TM)会向事务协调器(TC)申请一个全局事务id,并保存

   2.Seata会管理事务中所有相关的参与方的数据源,将数据操作之前和之后的镜像都保存在undo_log表中,这个表是seata框架规定的,方便提交(commit)或回滚(roll back)

  3.事务的发起方(TM)会连同全局id一起通过远程调用运行资源管理器(RM)中的方法

  4.资源管理器(RM)接收到全局id,并运行指定的方法,将运行的状态同步到事务协调器(TC)

  5.如果运行整体没有发生异常,发起方(TM)会通过事务协调器通知所有分支,将本次事务所有对数据库的影响真正生效,

如果任何一个参与者发生异常,那么都会通知事务协调器,再由事务协调器通知有分支,根据undo_log表中保存的信息,撤销(回滚)即将正式影响数据库的数据

Seata的其余三种TCC、SAGA 和 XA 事务模式

  下面逐一进行详细解释与说明:

  1. TCC(Try-Confirm-Cancel) TCC事务模式是一种基于业务逻辑的分布式事务模式。它将一个复杂的业务操作分解为三个阶段:尝试(Try)、确认(Confirm)和取消(Cancel)。
  • 尝试阶段:在该阶段,将检查各种前提条件是否满足,如果满足就执行业务操作,并进行预留资源的操作。如果不满足,就返回失败。
  • 确认阶段:在该阶段,确认操作将会提交所占用的资源。
  • 取消阶段:在该阶段,取消操作将会回滚之前的操作。

       TCC事务模式的主要应用场景是业务逻辑比较复杂、不适合使用XA或SAGA事务模式的情况。它的作用是通过将一个大事务拆解为多个小事务,增加了事务的可控性,并且可以保证数据的最终一致性。

  1. SAGA(Saga Pattern) SAGA事务模式是一种基于事件驱动的分布式事务模式。它将一个长时间或连贯性操作分解为多个独立的阶段(也称为saga片段),每个saga片段都可以独立执行和回滚。
  • 每个saga片段都定义了一组本地操作和补偿操作,用于实现数据的一致性和回滚。
  • 当一个saga片段执行成功后,会发布一个事件来触发下一个saga片段的执行。
  • 当发生错误或需要回滚时,可以通过执行补偿操作来撤销前面的操作。

       SAGA事务模式适用于长时间执行和具有连续性操作的业务场景。它的作用是通过将一个大的操作拆解为多个独立的片段,并通过事件驱动的方式实现数据的一致性。

  1. XA(eXtended Architecture) XA事务模式是一种基于两阶段提交的分布式事务模式。它是通过协调器(Coordinator)和参与者(Participant)之间的协作来实现分布式事务的提交和回滚。
  • 在第一阶段,协调器会向所有参与者发送事务准备请求,并等待参与者的回应。如果所有参与者都准备好了,协调器就进入第二阶段。
  • 在第二阶段,协调器会向所有参与者发送事务提交请求或回滚请求。参与者会根据请求进行相应的操作,并向协调器发送完成消息。

     XA事务模式适用于需要强一致性的分布式系统场景,但它对数据库和中间件的支持要求较高,并且在性能方面存在一定的开销。

      总结:

  • TCC事务模式适用于业务逻辑较为复杂的场景,通过拆分为多个小事务来实现数据一致性。
  • SAGA事务模式适用于长时间执行和连贯性操作的场景,通过事件驱动的方式实现数据一致性。
  • XA事务模式适用于需要强一致性的场景,但对数据库和中间件的支持要求较高。

seata的四种事物模式对比

            XA                 AT               TCC                SAGA
一致性强一致弱一致弱一致最终一致
隔离性
完全隔离
基于全局锁隔离基于资源预留隔离无隔离
代码侵入
性能很好很好
场景对一致性、隔离性有高要求的业务基于关系型数据库的大多数分布式事务场景都可以对性能要求较高的事务有非关系型数据库要参与的事务业务流程长、业务流程多参与者包含其它公司或遗留系统服务,无法提供 TCC模式要求的三个接口

Seata下载

   https://github.com/seata/seata/releases

  https://github.com/seata/seata/releases/download/v1.4.2/seata-server-1.4.2.zip

seata的使用

1.添加依赖

     <dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId></dependency>

2.配置yml文件

seata:tx-service-group: csmall_group # 分组service:vgroup-mapping:csmall_group: default # 默认at模式grouplist:default: localhost:9090

 3.使用

      在需要进行分布式事务的方法上加上 @GlobalTransactional 注解,比如:

@Service
public class OrderService {@GlobalTransactionalpublic void createOrder(Order order) {// TODO: 创建订单的业务逻辑// 调用其他微服务的业务逻辑productService.reduceStock(order.getProductId(), order.getQuantity());inventoryService.reduceInventory(order.getProductId(), order.getQuantity());}}
  • 在调用其他微服务的方法上加上 @GlobalLock 注解,确保在分布式事务期间不会有并发问题,比如:
    @Service
    public class ProductService {@GlobalLockpublic void reduceStock(Long productId, Integer quantity) {// TODO: 减少商品库存的业务逻辑}}
  • 最后是启动

  

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605933.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用Python实现每日新闻早报推送

本文将介绍如何使用Python编写简单的逻辑&#xff0c;通过调用API接口实现每日新闻推送功能。 步骤&#xff1a; 导入所需的库&#xff1a; 在代码的开头&#xff0c;我们需要导入所需的库。通常&#xff0c;我们会使用requests库来发送HTTP请求&#xff0c;以获取新闻数据。 …

试除法求约数算法总结

知识概览 试除法求一个数的约数的时间复杂度是。 例题展示 题目链接 活动 - AcWing 系统讲解常用算法与数据结构&#xff0c;给出相应代码模板&#xff0c;并会布置、讲解相应的基础算法题目。https://www.acwing.com/problem/content/871/ 题解 用试除法求约数&#xff0c;…

Cadence记录

第三讲原理图的绘制和后续处理 一、绘制原理图 1.同一个页面内创建电气互联 连线方式2种 使用连线(wire) 使用网络名&#xff08;net alias&#xff09; 检查网络是否连接&#xff0c;如图显示则好着 2.不同页面之间创建电气互联 左右之分&#xff0c;表示在这个页面的信号是…

vue3用户权限管理(路由控制等)

在前端开发的过程中&#xff0c;我们需要做前端的权限管理&#xff0c;我们需要根据后端提供的信息来控制权限&#xff0c;这时候就需要根据用户的操作来进行权限控制了。逻辑稍微有一点绕&#xff0c;多理解就好了。 用户路由权限管理 大致的实现原理&#xff1a; 一般将路由…

适配器Adapters

1.适配器作用 主要是对底层的东西进行改造 2.适配器种类&#xff1a;容器适配器&#xff0c;迭代器适配器&#xff0c;仿函数适配器 2.1容器适配器&#xff1a; stack&#xff0c;queue他们两的底层结构都为deque&#xff0c;deque有好多功能&#xff0c;而stack&#x…

微信管理大杀器:这个让工作高效不费力的利器你值得拥有!

在如今互联网社交时代&#xff0c;微信已经成为了人们生活中不可或缺的一部分。无论是与朋友聊天、分享生活&#xff0c;还是与客户进行商务洽谈&#xff0c;微信都扮演着重要的角色。对于个人而言&#xff0c;拥有一个高效管理微信私域的工具&#xff0c;将极大地提升运营效率…

可在图像中生成任意精准文本,支持中文!阿里开源AnyText

随着Midjourney、Stable Difusion等产品的出现&#xff0c;文生图像领域获得了巨大突破。但是想在图像中生成/嵌入精准的文本却比较困难。 经常会出现模糊、莫名其妙或错误的文本&#xff0c;尤其是对中文支持非常差&#xff0c;例如&#xff0c;生成一张印有“2024龙年吉祥”…

Java学习苦旅(二十七)——Java中的集合框架

本篇博客将初略讲解Java中的集合框架及背后的数据结构。 集合框架介绍 Java 集合框架 Java Collection Framework&#xff0c;又被称为容器 &#xff08;container&#xff09;&#xff0c;是定义在java.util包下的一组接口 interfaces 和其实现类 classes 。其主要表现为将多…

【Linux】宝塔端口不通

1.问题描述&#xff1a;端口不通 以端口16588为例&#xff1a; 服务器16588端口是关闭的&#xff0c;防火墙规则是放通的&#xff0c;是由于服务器内的对应程序没有监听到 对应 的公网上 图1&#xff1a;端口检测 图2&#xff1a; 端口已放行 此时访问仍然不通&#xff0c;但…

Vue-6、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

ip协议历史

今天的互联网&#xff0c;是万维网&#xff08;WWW&#xff09;一家独大。而在上世纪七八十年代&#xff0c;人们刚开始尝试网络连接时&#xff0c;那时出现了计算机科学研究网络、ALOHA 网、因时网、阿帕网等不同类型的网络&#xff0c;这些网络之间互相通信是个难题。 于是&…

openssl3.2 - 编译

文章目录 openssl3.2 - 编译概述OpenSSL源码下载编译目标如何编译前置环境 - perl前置环境 - VS前置环境 - NASM快速编译步骤编译 - Quick startInstall PerlInstall NASMUse Visual Studio Developer Command Prompt with administrative privilegesFrom the root of the Open…

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源…

【已解决】Pytorch RuntimeError: expected scalar type Double but found Float

本文作者&#xff1a; slience_me 文章目录 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a; 项目场景&#xff1a; 在训练模型时候&#xff0c;将数据集输入到网络中去&#xff0c;在执行卷积nn.conv1d()的时候&#xff0c;报出此错误 问题描述 报错…

IEDA中tomcat日志乱码解决

文章目录 乱码样式原因解决方案参考 乱码样式 原因 乱码原因是编码格式的问题&#xff0c;编码格式不统一&#xff0c;导致显示乱码。 解决方案 统一编码格式。 打开tomcat的配置文件&#xff0c;conf/logging.properties,进行如下修改 进入idea的安装文件中&#xff0c;b…

【docker笔记】Docker网络

Docker网络 容器间的互联和通信以及端口映射 容器IP变动时候可以通过服务名直接网络通信而不受到影响 常用命令 查看网络 docker network ls创建网络 docker network create XXX网络名字查看网络源数据 docker network inspect XXX网络名字删除网络 docker network rm…

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

Linux基础知识点-(七-线程)

目录 一、线程和进程 1.1 线程的基本概念 1.2 线程的优缺点 二、创建线程 2.1 pthread_create() - 创建线程函数 三、线程属性 3.1 pthread_attr_t类型 3.2 phread_t类型 四、线程退出 4.1 pthread_exit() 4.2 pthread_join() 4.3 pthread_detach() 一、线程和进…

2019数据结构----单链表真题

思路&#xff1a; (1)找到中间节点,将原链表一分为二 (2)后半段链表原地逆置 (3)合并链表 #include <stdio.h> #include <stdlib.h>//定义节点类型 typedef struct LNode {int data;//数据域struct LNode *next;//指针域 } LNode, *LinkList;void tailList(Link…

Rational rose 安装和使用 教程

前言 win10和win11都可以用&#xff0c;亲测了win10 Unified Modeling Language (UML)又称统─建模语言或标准建模语言&#xff0c;是始于1997年一个OMG标准&#xff0c;它是一个支持模型化和软件系统开发的图形化语言&#xff0c;为软件开发的所有阶段提供模型化和可视化支持…