SpringCloud入门实战(十五)分布式事务框架Seata简介

news2024/11/25 21:18:31

📝 学技术、更要掌握学习的方法,一起学习,让进步发生
👩🏻 作者:一只IT攻城狮 ,关注我,不迷路 。
💐学习建议:1、养成习惯,学习java的任何一个技术,都可以先去官网先看看,更准确、更专业。
💐学习建议:2、然后记住每个技术最关键的特性(通常一句话或者几个字),从主线入手,由浅入深学习。
❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。

文章目录

  • 一、分布式事务
    • 1、我们先回顾下事务
    • 2、分布式事务问题
    • 3、一般事务的解决方案为什么不能作用于分布式事务?
  • 二、分布式事务解决方案
  • 三、分布式事务框架Seata
    • 1、Seata是什么
    • 2、Seata整体架构
    • 3、Seata支持的配置中心
    • 4、事务信息存储配置
    • 5、微服务集成seata

我们先来回顾下事务和分布式事务是什么?然后我们面临哪些分布式事务问题,如何解决?带着问题我们一起向下学习。

一、分布式事务

1、我们先回顾下事务

事务是指数据库中的一组操作,这些操作要么全部成功执行,要么全部回滚,以保持数据的一致性和完整性。事务具有以下四个特性,通常称为ACID特性:

  • 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部失败回滚,没有中间状态。
  • 一致性(Consistency):事务的执行使数据库从一个一致性状态转移到另一个一致性状态。事务在开始和结束时,数据库必须满足预定义的一致性规则。
  • 隔离性(Isolation):事务的执行应该与其他并发执行的事务相互隔离,每个事务都感觉不到其他事务的存在。
  • 持久性(Durability):一旦事务提交,其对数据库的修改应该是永久性的,即使在系统故障的情况下也不应丢失。

本地事务:Spring本地事务使用@Transactional 大多数场景下,我们的应用都只需要操作单一的数据库,这种情况下的事务被称之为本地事务(Local Transaction)。本地事务的ACID特性是数据库直接提供支持。

分布式事务(Distributed Transaction)是指跨越多个分布式系统的事务,其中涉及到多个独立的参与者和资源。分布式事务需要确保多个参与者之间的操作的一致性和原子性。

2、分布式事务问题

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

  • 仓储服务(Stock):对给定的商品扣除仓储数量。
  • 订单服务(Order):根据采购需求创建订单。
  • 账户服务(Account):从用户账户中扣除余额。

单体应用被拆分成微服务应用,原来的三个模块被拆分为三个独立的应用,分别使用三个独立的数据源。
业务操作需要调用三个服务来完成,此时每个服务内部的数据一致性由本地事务来保证,但是全局的数据一致性问题没法保证。
故一次业务操作需要跨多个数据源或者需要跨多个系统进行远程调用,就会产生分布式事务问题
在这里插入图片描述

由于网络延迟、节点故障、通信失败等原因,导致分布式事务无法像单个系统的事务那样简单地实现ACID特性。

常见的分布式事务问题包括

  • 部分失败:在一个分布式事务中,有些参与者执行成功,而其他参与者执行失败,导致事务的部分操作成功,部分操作失败。
  • 数据不一致:在一个分布式事务中,数据的一致性无法保证,可能因为参与者之间的数据冲突或者数据同步延迟。

3、一般事务的解决方案为什么不能作用于分布式事务?

解决一般事务问题的方法,例如使用数据库的ACID特性、锁机制、回滚和恢复机制等,无法直接应用于分布式事务问题,原因如下:

  • 并发控制问题:在分布式环境中,由于多个事务同时执行,并发控制变得更加复杂。传统的锁机制在分布式环境中无法有效地协调多个参与者之间的并发访问。
  • 通信故障:分布式事务中的参与者之间通过网络进行通信,网络延迟、断开连接或消息丢失可能导致事务协调失败或超时。
  • 参与者故障:在分布式系统中,参与者可能由于硬件故障、软件错误或其他原因而崩溃或无响应。这可能导致事务无法完成或导致数据不一致。
  • 同步问题:在分布式环境中,数据的复制和同步可能存在延迟,导致不同参与者之间的数据不一致。
  • 跨越多个系统:分布式事务涉及跨越多个独立的系统,每个系统可能具有不同的事务管理机制和数据存储方式,这增加了事务管理的复杂性。

二、分布式事务解决方案

这里先简单提及一下常见的分布式事务解决方案

  • seata阿里分布式事务框架
  • 消息队列
  • saga
  • XA

这四种常见的分布式事务解决方案,分别对应着分布式事务的四种模式:AT、TCC、Saga、XA;

四种分布式事务模式,都有各自的理论基础,分别在不同的时间被提出;每种模式都有他的适用场景,同样每个模式也都诞生有各自的代表产品,而这些代表产品,可能就是我们常见的(全局事务、基于可靠消息、最大努力通知、TCC)

分布式事务相关的协议有2PC、3PC。由于三阶段提交协议3PC非常难实现,目前市面主流的分布式事务解决方案都是2PC协议。两阶段提交协议顾名思义,分为两个阶段:Prepare和Commit。

TCC(Try-Confirm-Cancel)实际上是服务化的两阶段提交协议。

三、分布式事务框架Seata

1、Seata是什么

【Seata官网】

Seata(Simple Extensible Autonomous Transaction Architecture)是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 ATTCCSAGAXA四种事务模式,为用户打造一站式的分布式解决方案,包括事务管理、本地事务协调、分布式事务日志和分布式锁等组件。

Seata通过使用分布式事务日志和分布式锁来保证事务的一致性和可靠性。分布式事务日志记录全局事务的操作日志,并提供了事务的恢复和回滚能力。分布式锁用于保护全局事务在不同参与者之间的并发访问,确保数据的一致性和正确性。

2、Seata整体架构

一个典型的分布式事务过程分为一ID(全局事务id)+三组件模型。

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

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

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

在这里插入图片描述
Seata的整体架构如上图,分TC、TM和RM三个角色,TC(Server端)为单独服务端部署,负责维护分布式事务的运行状态,TM和RM(Client端)由业务系统集成,TM是一个分布式事务的发起者和终结者,而RM则负责本地事务的运行并上报。

一个典型的事务过程

1、TM向TC申请开启一个全局事务 ,全局事务创建成功并生成一个全局唯一的XID;

2、XID在微服务调用链路的上下文中传播;

3、RM向TC注册分支事务,将其纳入XID对应全局事务的管辖;

4、TM向TC发起针对XID的全局提交或回滚决议;

5、TC调度XID下管辖的全部分支事务完成提交或回滚请求;

3、Seata支持的配置中心

Seata是一个分布式事务,seata服务端也是一个微服务,需要和其他微服务一样需要注册中心和配置中心

Seata支持的配置中心Seata支持的注册中心
nacos
consul
apollo
etcd
zookeeper
file (读本地文件, 包含conf、properties、yml配置文件的支持)
eureka
consul
nacos
etcd
zookeeper
sofa
redis
file (直连)

4、事务信息存储配置

Server 端存储模式(store.mode)支持三种方式:

存储模式初始化说明
file 单机模式(默认为此模式)无需改动,直接启动全局事务会话信息存储在内存中,读写并持久化至本地文件 root.data (bin\sessionStore\root.data) 中,性能较高
db 高可用模式(Mysql 5.7+)1. 初始DB:seata/script/server/db/mysql.sql
2. 修改存储模式:store.mode=“db”
3. 修改存储数据源:store.db相关属性
全局事务会话信息通过db共享,相应性能差些
redis (Seata-Server 1.3及以上版本支持)1. 修改存储模式:store.mode=“redis”
2. 修改存储数据源:store.redis相关属性
性能较高,存在事务信息丢失风险,需提前配置合适当前场景的redis持久化配置

5、微服务集成seata

Seata安装与环境搭建参看:Seata1.5.2+Nacos分布式事务环境搭建

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

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

相关文章

前端基础3——JavaScript基础用法

文章目录 一、基本使用1.1 内部方式1.2 外部导入方式1.3 css标签调用js脚本(触发事件) 二、Windows对象2.1 对象属性2.2 对象方法 三、数据类型3.1 字符串处理3.2 数组处理3.3 对象处理 四、流程控制4.1 操作符4.2 if判断语句4.3 for循环语句4.4 continu…

基于nRF52840 Dongle配合Wireshark对Mesh网络抓包并解析(Nordic)

Mesh网络抓包解析 准备说明配置过滤解密分析 准备 1)nRF52840 Dongle 2)Mesh节点 3)手机作为配网器(苹果手机安装nRF Mesh APP) 说明 1)节点使用的例程目录:nrf5sdkformeshv500src\examples\…

手机录屏方法推荐,3种方法带你玩转

随着智能手机的普及,录制手机屏幕已经成为我们在日常生活中和工作中经常需要进行的操作。有时候,我们想录制一段手机游戏的精彩瞬间或者与朋友分享手机操作的技巧。因此,找到一种方便、简单的手机录屏方法变得尤为重要。本文将介绍手机录屏的…

【IEEE会议】第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023)

第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023) 2023 5th International Conference on Frontiers Technology of Information and Computer 第五届信息与计算机前沿技术国际学术会议(ICFTIC 2023)将在中国青岛举行, 会期是2023年11月17-19日,…

(已解决)ModuleNotFoundError: No module named ‘braceexpand‘

问题描述 import braceexpand, yaml ModuleNotFoundError: No module named braceexpand 解决办法 pip install braceexpand 参考链接https://www.roseindia.net/answers/viewqa/pythonquestions/52026-ModuleNotFoundError-No-module-named-braceexpand.html 其他问题-1 im…

安全狗陈奋:数据安全需要建立在传统网络安全基础之上

8月22日-23日,由创业邦主办的“2023 DEMO WORLD 企业开放式创新大会”在上海顺利举办。 作为国内云原生安全领导厂商,安全狗受邀出席此次活动。 厦门服云信息科技有限公司(品牌名:安全狗)成立于2013年,致力…

钢筋水泥中的信仰--爱摸鱼的美工(16)

好久没有更新了,爱摸鱼的美工摸鱼太久可,终于出了一起钢筋水泥中的信仰,希望人们更加坚定个人的信仰。

Pandas 2.1发布了

2023年3月1日,Pandas 发布了2.0版本。6个月后(8月30日),更新了新的2.1版。让我们看看他有什么重要的更新。 更好的PyArrow支持 PyArrow是在Panda 2.0中新加入的后端,对于大数据来说提供了优于NumPy的性能。Pandas 2.1…

【RabbitMQ】服务启动成功,无法访问localhost:15672(RabbitMQ Management)

问题描述 RabbitMQ 服务已经启动成功,已经安装rabbitmq_management插件,无法访问RabbitMQ Management(http://localhost:15672/)。 原因分析 15672端口被Microsoft Edge占用。 解决方案 打开cmd终端,输入指令&#…

超声波气象站的功能和作用

超声波气象站是一种先进的测量气象要素的设备,其功能和作用在许多领域中都得到了广泛的应用。下面将从功能和作用两个方面来详细介绍超声波气象站。 一、超声波气象站的功能 ①测量各种气象要素 超声波气象站可以测量多种气象要素,包括温度、湿度、气…

Spark 环境安装与案例演示

Spark 环境安装 一、准备工作 1、hadoop成功安装 2、防火墙关闭 二、解压安装 1、上传 spark 安装包到/tools 目录,进入 tools 下,执行如下命令: tar -zxvf spark-2.1.0-bin-hadoop2.7.tgz -C /training/由于 Spark 的脚本命令和 Hadoop…

【Python】爬虫练习-爬取豆瓣网电影评论用户的观影习惯数据

目录 前言 一、配置环境 1.1、 安装Python 1.2、 安装Requests库和BeautifulSoup库 1.3.、安装Matplotlib 二、登录豆瓣网(重点) 2.1、获取代理 2.2、测试代理ip是否可用 2.3、设置大量请求头随机使用 2.4、登录豆瓣网 三、爬取某一部热门电影…

Redis 7 第四讲 数据持久化

总体 RDB 介绍 RDB 持久化以指定的时间间隔执行数据集的时间点快照 。 把某一时刻的数据和状态以文件的形式写到磁盘上,即使出现故障宕机,快照文件也不会丢失,数据的可靠性得到保证。快照文件就是RDB(Redis DataBase)文件(dump.rdb) 作用 在指定的时间间隔内将内存中的数…

Redis的缓存穿透,缓存击穿,缓存雪崩

1. 缓存穿透 什么是缓存穿透? 缓存穿透说简单点就是大量请求的 key 是不合理的,根本不存在于缓存中,也不存在于数据库中 。这就导致这些请求直接到了数据库上,根本没有经过缓存这一层,对数据库造成了巨大的压力&…

VB:数值交换

VB:数值交换 Private Sub Command1_Click()Dim a%, b%a 5b 7Call mySwap(a, b)Print "a"; aPrint "b"; b End Sub ByRef 关键字允许子程序直接修改传递的参数的值,而不仅仅是拷贝一份副本,这样可以实现更灵活的数据处…

ArcGIS Maps SDK for JS(二):MapView简介----创建2D地图

文章目录 1 AMD 引用 ArcGIS Maps SDK for JavaScript2 加载相应模块3 创建地图4 创建 2D 视图 view5 确定页面内容6 CSS 样式7 完整代码 本教程使用 AMD 模块&#xff0c;指导您如何在二维地图视图中创建一个简单的地图。 1 AMD 引用 ArcGIS Maps SDK for JavaScript 在 <…

9.物联网LWIP,ip数据报,udp数据报,tcp数据报

一。ip协议原理&#xff08;网络层&#xff09; 1.网络地址转换NAT 我们上网是通过运营商向我们提供的IP地址来上网的&#xff0c;并不是自身的IP地址&#xff0c;所以这就需要网络地址转换NAT的帮助。即内网访问外网所需要的ip转换装置。 2.ip数据报 &#xff08;1&#xff…

延长Flash存储器使用寿命的研究

发布时间&#xff1a;2009年12月15日   引 言 随着嵌入式系统在数码相机、数字摄像机、移动电话、MP3音乐播放器等移动设备中越来越广泛的应用&#xff0c;Flash存储器已经逐步取代其他半导体存储元件&#xff0c;成为嵌入式系统中主要数据和程序载体。Flash存储器又称闪存&…

黑马最新MybatisPlus教程!帮你实现快速开发

天下武功&#xff0c;唯快不破。在互联网世界中&#xff0c;更甚。产品更新要快、迭代要快、开发速度那必须得快。 在追求“快”的这条路上&#xff0c;大佬们都会使用上好的开发工具&#xff0c;来帮助自己实现高效开发&#xff0c;其中MybatisPlus便是提速的重要角色。 我们…

selenium+find_elements用法

1、假如我们遇到多个标签的class一样&#xff0c;比如像下面这样的 我们可以采用js语法去定位&#xff0c;比如&#xff1a; document.getElementsByClassName("ant-calendar-picker-input ant-input")[0]