深度解读分布式事务Seata入门到实践 -尚马教育

目录

  • 一、事务的回顾
    • 1、什么是事务
    • 2、事务的特性
    • 3、事务的隔离级别
    • 4、事务的分类
  • 二、分布式事务
    • 1、什么是分布式事务
    • 2、分布式事务产生的背景
    • 3、分布式事务产生的场景
    • 4、分布式事务理论
      • ==4.1 CAP理论==
      • 4.2 Base理论
    • 5、分布式事务的解决方案
  • 三、强一致性介绍
    • 3.1 基本理解
    • 3.2 DTP模型
    • 3.3 落地协议XA
    • 3.4 ⼆阶段提交模型
    • 3.5 ⼆阶段提交的问题
    • 3.6 navicat操作xa
  • 四、XA强一致性实战
    • 4.1 XA强⼀致性JDBC实战
    • 4.2 XA强⼀致性Mybatis操作实战

一、事务的回顾

1、什么是事务

事务表示逻辑上的⼀组操作,⼀个不可分割的执⾏单元,这个单元中的所有操作要嘛全部执⾏成功,要嘛全部执⾏失败

2、事务的特性

在这里插入图片描述

3、事务的隔离级别

4、事务的分类

在这里插入图片描述

  • 扁平事务
    扁平事务是最常⻅的事务,扁平事务⼀般以 start transaction或者begin开始 以rollback或者commit结束,中间的操作都在⼀个事务中。

  • 扁平事务(保存点)
    在这里插入图片描述

  • 链式事务

  • 嵌套事务

  • 分布式事务

二、分布式事务

1、什么是分布式事务

一组操作会产⽣多个数据库session会话 此时就会出现分布式事务

2、分布式事务产生的背景

1)数据库的数据量大,最终拆库拆表,把一个数据库中的数据,放到多台数据库中
⽐如: shardingSphere 再⽐如 springBoot项⽬配置多数据源等等

2)项目架构的转变
项⽬从单体架构->垂直架构->分布式架构->soa架构->微服务架构

3、分布式事务产生的场景

1) 跨数据库
⽐较典型的就是单体项⽬数据层进⾏拆库拆表,或者单体项⽬多数据源的情况

2)跨进程
⽐如多个服务访问的是同⼀个数据库 这种情况下 很少⻅ 但是照样会出现分布式事务

3)跨jvm进程,跨数据库
比较典型的就是微服务项目,一个事务的执行需要牵扯到多个服务,每个服务又有自己的数据库,跨项⽬ ⼜ 跨数据库

【总结】

不管是跨进程,还是跨数据库,还是多服务访问单数据库,都有一个本质的特点,操作时可能存在多个session会话,我们可以理解为如果一组操作会产⽣多个数据库session会话 此时就会出现分布式事务

4、分布式事务理论

4.1 CAP理论

CAP理论指:分布式事务中,不能同时满足一致性,可用性,分区容忍性

  • C:表示⼀致性(Consistency)
  • A : 表示可⽤性(Availability)
  • P:表示分区容忍性(Partition Tolerance)

一致性:一致性表示用户对数据的修改操作,在所有的副本中,要么全部执行成功,要么全部执行失败。(强调的是数据必须一致,允许锁等待和超时)

可⽤性:表示数据库节点可⽤即可,即客户端访问数据的时候 不存在超时 错误响应 能够快速响应结果。此时节点中的数据可以⼀致 也可以不⼀致,可⽤性的关注点就是系统可⽤,访问时可以快速给响应即可。

⽐如 mysql的读写分离 当对主机添加数据时,从机会复制这条数据 当客户端读取从机时 不能超时报错必须得有响应。此时允许读取的数据不是最新的。从机还不能被锁定

分区容忍性:表示把存储系统部署在多个节点中,并且这些节点在不同的⽹络节点中,这就形成了⽹络分区,由于⽹络问题节点之间的通讯可能失败,分区容忍性表示 就算节点通讯失败 照样能对外提供服务

【总结】一致性和可用性是矛盾的
在这里插入图片描述

4.2 Base理论

对 cap中的ap模式做客一个拓展,它牺牲了一致性,换来可用性

在base理论中 强调了三点:

1)基本可用

是指在分布式系统中 如果出现故障,允许系统损失部分功能,但是要保证系统基本可⽤ ⽽不是整个系统死掉(⽐如我们购买⽕⻋票时 下订单经常出错 当下订单功能出错时 我们还可⽤正常查询⻋票 ⽽不是整个12306瘫痪)

2)软状态
软状态指允许系统存在中间状态,中间状态不会影响系统的整体可⽤性,允许系统各个节点中数据同步延迟。

3)最终一致性
最终⼀致性表示 允许分布式系统中各个节点的数据存在不⼀致的情况 但是经过⼀段时间,各
个节点上的数据 最终还是⼀致的。

5、分布式事务的解决方案

强⼀致性 cp:XA协议(数据库级别的规范,需要数据库的支持)

弱⼀致性 ap

  • TCC
  • 可靠消息⼀致性
  • 其他⽅式

三、强一致性介绍

3.1 基本理解

相关特点
强⼀致性解决⽅案要求在任何时间点 任何时刻查询 参与全局事务的各个节点的数据都必须是⼀致的

解决思想

  • DTP模型
  • 2PC⼆阶段提交模型

3.2 DTP模型

DTP模型是X/Open组织定义的⼀套分布式事务标准, 这个标准定义了解决分布式事务的规范和API接⼝,由各地⼚商实现。

DTP模型提出三⼤组件
1:应⽤程序(AP) : 应⽤程序就是我们的项⽬ 控制着事务的开始和结束
2:资源管理器(RM): 资源管理器就是指事务的参与者 在实际中就是我们的数据库
3:事务管理器™: 负责管理协调事务 负责分配事务的唯⼀标识

DTP模型,规范了分布式事务的模型设计(三⼤组件)

3.3 落地协议XA

XA规范
XA则规范了TM与RM之间的通信接⼝,在TM与多个RM之间形成⼀个双向通信桥梁 是数据库级别的规范

规范如下
xa_start 开启⼀个分⽀事务
xa_end 取消分⽀事务
xa_prepare 询问资源管理器是否做好了提交事务的准备
xa_commit 通知资源管理器提交事务
xa_rollback 通知事务管理器回滚事务
xa_recover 列出需要恢复的事务分⽀

mysql的innoDB引擎是⽀持XA的 是基于XA的2阶段提交 可以使⽤show engines \G查看

具体语法 xid表示事务唯⼀标识符
1: 开启XA事务
xa start xid
2: 结束XA事务
xa end xid
3: 准备提交XA事务
xa prepare xid
4: 提交xa事务
xa commit xid
5: 回滚xa事务
xa rollback xid

3.4 ⼆阶段提交模型

是基于 DTP模型的
表示在规范的情况下,事务的完成分为2个阶段
1:prepare阶段
2:Commit rollback阶段

第⼀个阶段: 资源服务器执⾏xa prepare。
事务管理器通知资源管理器,让资源管理器为提交事务做准备,资源管理器收到消息后,执⾏sql 执⾏本地事务,执⾏完毕之后不会提交事务,向事务管理器说我执⾏sql没有出现问题 已经准备好了提交

第⼆个阶段:
如果各个资源管理器都执⾏成功,事务管理器则向各个资源管理器发送提交事务的请求,各个资源管理器收到请求之后 执⾏本地事务提交然后释放资源。
如果有资源管理器返回的是失败 事务管理器则向各个资源管理器发送回滚事务的请求,各个资源管理器收到请求之后 执⾏事务回滚 然后释放资源

成功模型图
在这里插入图片描述

失败模型图
在这里插入图片描述

3.5 ⼆阶段提交的问题

在这里插入图片描述

3.6 navicat操作xa

四、XA强一致性实战

4.1 XA强⼀致性JDBC实战

4.2 XA强⼀致性Mybatis操作实战

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

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

相关文章

2023.12.14 hive sql的聚合增强函数 grouping set

目录 1.建库建表 2.需求 3.使用union all来完成需求 4.聚合函数增强 grouping set 5.聚合增强函数cube ,rollup 6.rollup翻滚 7.聚合函数增强 -- grouping判断 1.建库建表 -- 建库 create database if not exists test; use test; -- 建表 create table test.t_cookie(month …

人工智能导论习题集(2)

第三章:确定性推理 题1题2题3题4题5题6 题1 题2 题3 题4 题5 题6

免费!视频下方人物(照片)介绍字幕制作pr字幕条模板素材

Premiere Pro模板,具有15个视频下方三分之一处添加人物介绍(图像)字幕pr字幕条模板素材下载。 适用于Premiere Pro 2019及以上版本。可以更改颜色更改样式。在视频的开头、中间和结尾使用。包括视频教程。不包括音乐。来自PR模板网:https://prmuban.com/…

Mac 中文版 Navicat Premium 16 下载安装详细教程

哈喽朋友们大家好,今天做一期 Mac 数据库连接工具 Navicat Premium 16 的安装教程,很多朋友不知道怎么安装的,要不就是有试用期无法正常使用,要不就是英文的,改不了中文,大家可以跟着我的步骤安装&#xff…

视频推拉流平台EasyDSS点播文件播放请求添加token验证的实现方法

EasyDSS视频直播点播平台可提供一站式的视频推拉流、转码、点播、直播、播放H.265编码视频等服务,搭配RTMP高清摄像头使用,可将设备的实时流推送到平台上,实现无人机视频推流直播等应用。今天我们来介绍下EasyDSS系统点播文件播放请求添加tok…

Linux---创建、删除文件及目录命令

1. 创建、删除文件及目录命令的使用 命令说明touch 文件名创建指定文件mkdir 目录名创建目录(文件夹)rm 文件名或者目录名删除指定文件或者目录rmdir 目录名删除空目录 touch命令效果图: mkdir命令效果图: rm命令效果图: rm删除目录效果图 说明: rm命令想要删除目录需要加上…

HTML---表单

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.表单概念 HTML表单是网页上用于收集用户输入信息的一种元素。它由一系列输入字段(input)、选择字段(select)、文本区域(textarea&a…

缓存雪崩问题与应对策略

目录 1. 缓存雪崩的原因 1.1 缓存同时失效 1.2 缓存层无法应对高并发 1.3 缓存和后端系统之间存在紧密关联 2. 缓存雪崩的影响 2.1 系统性能下降 2.2 数据库压力激增 2.3 用户请求失败率增加 3. 应对策略 3.1 多级缓存 3.2 限流与降级 3.3 异步缓存更新 3.4 并发控…

​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer

​Linux Ubuntu环境下安装配置Docker 和Docker、compose、mysql、中文版portainer 这篇文章探讨了在Linux Ubuntu环境下安装和配置Docker及其相关工具的过程。首先介绍了Docker的基本概念,然后详细讲解了在Ubuntu系统上的安装步骤。随后,文章涵盖了Dock…

智能优化算法应用:基于旗鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于旗鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于旗鱼算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.旗鱼算法4.实验参数设定5.算法结果6.参考文献7.MA…

yaml 文件格式

yaml文件:是一种标记语言,以竖列形式展示序列化的时间格式,可读性高 类似于json格式。语法简单。 yaml通过缩进来表示数据结构,连续的项目用-减号来表示。 yaml文件使用的注意事项: 1,大小写敏感 2&am…

Apache Web 服务器监控工具

将Apache Web 服务器监控纳入 IT 基础架构管理策略有助于先发制人地识别性能瓶颈,这种主动监控方法提供必要的数据,以确保 Web 服务器能够胜任任务,并在需要时进行优化。保证客户获得流畅、无忧的用户体验可以大大有助于巩固他们对组织的信任…

SSL证书过期怎么更新?

一、概述 SSL证书是用于加密网站和客户端之间通信的一种数字证书,可以确保数据传输的安全性和保密性。然而,SSL证书是有有效期的,一旦过期就需要及时更新。本文将介绍如何更新SSL证书,以确保网站的安全性和正常运行。 二、SSL证…

【字符串】ABC324E

退役啦,接下来的博客全是图一乐啦 E - Joint Two Strings 题意 思路 统计两个指针的方案数一定是枚举一个,统计另一个 然后因为拼起来之后要包含 t 这个字符串,隐隐约约会感觉到和前缀后缀子序列有关 考虑预处理每个 s[i] 的最长公共前…

gRPC-Gateway:高效转换 RESTful 接口 | 开源日报 No.105

grpc-ecosystem/grpc-gateway Stars: 16.4k License: BSD-3-Clause gRPC-Gateway 是一个遵循 gRPC HTTP 规范的 gRPC 到 JSON 代理生成器。它是 Google 协议缓冲编译器 protoc 的插件,可以读取 protobuf 服务定义并生成反向代理服务器,将 RESTful HTTP…

pycharm中如何去除波浪线的设置

pycharm中,碰到恼人的红绿波浪线,打开’file-settings’,然后,参照如图设置,去除’effects’选项:

【Linux服务器Java环境搭建】09 在CentOS系统中安装和配置clickhouse数据库

一、安装环境 CentOS7 二、官网安装参考文档 官网安装参考文档 不同系统请参考如下建议 从RPM软件包安装: 建议在CentOS、RedHat和所有其他基于rpm的Linux发行版上使用官方预编译的rpm软件包从DEB软件包安装: 建议在Debian或Ubuntu上使用官方预编译…

C语言 联合体验证 主机字节序 +枚举

联合体应用&#xff1a;验证当前主机的大小端&#xff08;字节序&#xff09; //验证当前主机的大小端 #include <stdio.h>union MyData {unsigned int data;struct{unsigned char byte0;unsigned char byte1;unsigned char byte2;unsigned char byte3;}byte; };int main…

详细说说vuex

Vuex 是什么 Vuex有几个属性及作用注意事项vuex 使用举例Vuex3和Vuex4有哪些区别 创建 Store 的方式在组件中使用 Store辅助函数的用法响应式的改进Vuex4 支持多例模式 Vuex 是什么 Vuex是一个专门为Vue.js应用设计的状态管理构架&#xff0c;它统一管理和维护各个Vue组件的可…

【深度学习】Pytorch 系列教程(一):PyTorch数据结构:1、Tensor(张量)及其维度(Dimensions)、数据类型(Data Types)

文章目录 一、前言二、实验环境三、PyTorch数据结构0、分类1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;0维&#xff08;标量&#xff09;1维&#xff08;向量&#xff09;2维&#xff08;矩阵&#xff09;3维张量 2. 数据类型&#xff08…