分布式事务 学习

news2024/10/1 16:05:07

分布式事务

关系型数据库事务(本地事务)

  • 原子性:构成事务的所有操作,要么都执行完成,要么都不执行/
  • 一致性:在事务执行前后,数据库的一致性约束没有被破坏。
  • 隔离性:并发的两个事务的执行互不干扰
  • 持久性:事务完成后,事务对数据的更改会被持久化到数据库,且不会被回滚。

分布式事务 :涉及多个事务之间网络远程协作的事务

微服务之间通过网络(HTTP)通信。

产生场景:
  • 微服务架构,跨JVM进程产生分布式事务
  • 单体系统访问多个数据库实例,跨数据库实例
  • 多服务访问同一个数据库实例,跨JVM进程,两个微服务持有不同的数据库连接。

CAP理论: 一致性、可用性、分区容忍性

分布式事务控制到哪个程度呢?

  • 具备P市,C、A不能共存
一致性

强一致性: 任何事件查询每个结点的数据都一致。

分区容忍性
  • 通常,分布式系统的各结点部署在不同的子网,就是网络分区。不可避免地会出现,因为网络问题导致结点间通信失败。节点间通信失败时,仍然可对外提供服务就是分区容忍性。
    目标:
  • 主数据库向数据库同步数据失败不印象读写操作。
  • 其中一个结点挂了,不影响其他节点
    实现:
  • 异步取代同步(结点间松散耦合)
  • 一主多从
    分区容忍性是分布式系统具备的基本能力
AP

放弃一致性

CP

放弃可用性

CA

放弃分区容忍性,不进行分区。不考虑网络不同或者结点挂掉的情况。不是标志的分布式系统。常用的关系型数据库

BASE理论(AP的扩展)

强一致性和最终一致性

Basically Available、 Soft state、Eventually consistent

柔性事务

  • 出现故障时,允许部分不可用,包装核心功能可用
  • 最终一致性
  • 软状态: 比如支付中、数据同步中… …

分布式事务解决方案

2PC

两阶段提交协议[准备阶段、提交阶段]
整个事务过程由事务管理器和参与者组成
事务管理器决策事务的提交和回滚。事务参与者负责自己本地事务的提交和回滚。
在这里插入图片描述
在这里插入图片描述

2PC解决方案:
XA方案

2BC的传统方案在数据库层面实现。

DTP分布式事务处理模型
  • 角色:
  • AP:应用程序,使用DTP分布式事务的程序。
  • RM:资源管理器
  • TM:事务管理器
  • 基于数据库的XA协议来实现2PC又称为XA方案,XA : 2PC接口协议。

TM向AP提供应用程序编程接口,AP通过TM提交及回滚事务
TM交易中间件通过XA接口来通知RM数据库事务的开始、结束以及提交、回滚

问题:依赖于数据库,要求数据库支持2PC协议;准备阶段没有正式提交。资源锁需要等两个阶段结束才会释放。

Seata方案

开源的分布式事务框架。性能较好。对业务0侵入。提供2PC及TCC模式的分布式事务解决方案

在这里插入图片描述

TCC: [try cancel Confirm]

try阶段都成功就认为一定能成功;如果Confirm失败则重试,或人工介入处理;
如果有try失败,就回滚成功try的资源。因为try时做了资源预留等操作。

在这里插入图片描述

  • 幂等问题:幂等是指:同一个操作,无论请求多少次,其结果都相同。解决:增加执行状态,每次执行前都查询该状态。
  • 空回滚:没调用try,却调用了Cancel方法。出现原因:一个分支事务所在服务宕机或网络异常,分支事务记录为失败,这时其实没有执行try方法,但是故障恢复后,分布式事务进行回滚调用二阶段的Cancel方法,从而形成空回滚。解决:第一阶段Try方法中插入记录表示第一阶段执行了,Cancel接口读取该记录,判断是否执行了Try.
  • 悬挂:对于分布式事务,其二阶段Cancel比Try接口先执行。出现原因:
    在这里插入图片描述
TCC解决方案

在这里插入图片描述
Hmily

在这里插入图片描述

可靠消息最终一致性方案

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

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

相关文章

『第一章』命运的齿轮开始转动:雨燕(Swift)诞生!

在本篇博文中,您将学到如下内容: 1. 破茧成“燕”2. 持续进化!3. Swift 5.0:ABI 稳定性4. Swift 5.1:模块稳定性和库进化5. Swift 5.9 来了6. 登高望远:Swift 6.0总结 雨燕翻新幕,风鹃绕旧枝 金鹊徒为滞,雨…

程序员的新去处?国内新能源公司大汇总!

近几年来,传统互联网企业哀鸿遍野,而新能源车企却在悄然崛起:HC逐年增加,薪资逐渐起飞,年终分红也让人眼红…… 聪明的程序员们已经把目光瞄准了新时代新能源车企,今天就带大家横向对比一下国内比较火热的…

2.7.C++项目:网络版五子棋对战之session模块的设计

文章目录 零、前置一、意义二、功能三、管理四、框架五、完整代码 零、前置 在WEB开发中,HTTP协议是⼀种无状态短链接的协议,这就导致⼀个客户端连接到服务器上之后,服务器不知道当前的连接对应的是哪个用户,也不知道客户端是否登…

24李永乐模拟6套卷中的一道定积分定义+真题改编题

大概率是武忠祥老师出的一道题,同时考察了数形结合,定积分换元,无穷级数表示,广义积分中值定理,定积分定义的一道真题改编好题。 第二问用第一问结论,区间再现一步秒杀,颇有真题风范。

找不到msvcp100.dll解决教程

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp100.dll丢失”。这个错误通常会导致某些应用程序无法正常运行。为了解决这个问题,本文将介绍四个修复msvcp100.dll丢失的方法,帮助读者快速恢复计算机的正常运…

【c++】运算符重载实例

重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题,num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…

Calibre拾遗:FDI (Foreign Database Interface)系统简介

Calibre是强大的GDS处理工具,包括查看,验证,分析等操作,操作由浅入深,除过手动编辑GDS的不是很灵活外,其他各种命令和操作策略,都是远(遥)远(遥)走…

使用create-vue创建项目

认识create-vue create-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代构建工具),为开发提供极速响应。 使用create-vue创建项目 1.前提环境条件 已安装16.0或更高版本的Node.js node -v 2.创建一个Vue应用 npm init…

Monocular arbitrary moving object discovery and segmentation 论文阅读

基本信息 题目:Monocular Arbitrary Moving Object Discovery and Segmentation 作者: 来源:BMVC 时间:2021 代码地址:https://github.com/michalneoral/Raptor Abstract 我们提出了一种发现和分割场景中独立移动的…

[算法训练营] 回溯算法专题(一)

🕺作者: 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇码字不易,你的👍点赞🙌收藏❤️关注对我真的…

Linux系列讲解 —— VIM配置与美化

目录 1. Vim基本配置1.1 配置文件1.2 基本配置 2. 插件管理器Vundle2.1 下载Vundle2.2 在vimrc中添加Vundle的配置 3. Vundle的使用3.1 安装插件3.2 卸载插件 1. Vim基本配置 1.1 配置文件 vim的配置文件有两处,请根据实际情况选择修改哪个。 (1) 全局配置文件&am…

电子元器件管理系统 JAVA语言开发

目录 一、系统介绍 二、系统下载 三、系统截图 一、系统介绍 基于VueSpringBootMySQL的电子元器件管理系统包含元器件单位模块、元器件仓库模块、元器供应商模块、元器件品类模块、元器件明细模块、元器件采购模块、元器件采购审核模块、元器件领用模块、学生元器件申请模块…

前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(二)

阳光总在风雨后,请相信有彩虹。 案例 - 图书管理 bootstrap弹框 需求,点击添加按钮,没有离开当前页面,在当前页面弹出弹框(弹窗) 先学着实现一个简单的弹框,如下图右下角 bootstrap有两种方式…

openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户

文章目录 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户108.1 创建、修改和删除用户108.2 私有用户108.3 永久用户108.4 用户认证优先规则 openGauss学习笔记-108 openGauss 数据库管理-管理用户及权限-用户 使用CREATE USER和ALTER USER可以创建和管理数据…

解决虚拟机联网问题

虚拟机开机后发现右上角缺少联网标志(下面有正常联网标志),这样就是连不上网的 不信你可以打开Ubuntu里面的浏览器或ping www.baidu.com 1.编辑虚拟机设置-->网络适配器-->如图所示 2.选择编辑-->虚拟网络编辑器 3.更改设置 4此处可以选择还原默认设置&am…

【JAVA学习笔记】42 - 内部类(难点,重点)

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter10/src/com/yinhai/innerclass_ 一、基本介绍 一个类的内部又完整的嵌套了另一个类结构。被嵌套的类称为内部类(inner class),嵌套其他类的类称为外部类(outer class)。是我们类的第五大成…

【蓝桥每日一题]-动态规划 (保姆级教程 篇12)#照相排列

这次是动态规划最后一期了,感谢大家一直以来的观看,以后就进入新的篇章了 目录 题目:照相排列 思路: 题目:照相排列 思路: 首先记录状态f[a][b][c][d][e]表示每排如此人数下对应的方案数,然…

java中按行读取文件内容

java中按行来读取文件内容,一般对文件也是又要求的,比如文件编码utf-8,内容是按行可读,而不是一堆字节码。这类文件,我们按行读取,主要是方便快速查看内容,并且用这些内容来作别的用途&#xff…

FileUpload控件上传文件时出现 不支持给定路径的格式.的解决方法

正常代码,部署到server 2012时,在上传音频mp3文件时,显示错误“不支持给定路径的格式”,上传控件使用FileUpload控件: 因为程序之前是正常的,因此应该不是程序的问题。 上传时,发现在选择文件时…

F28335-可移植新建工程模板-基于bitfield

文章目录 前言步骤新建工程工程管理拷贝底层文件 添加测试函数编写main.c测试函数 前言 实验要求利用28335芯片,重新学习一下DSP28335,并做个记录。 值得一提的是,28335只能用寄存器开发,而不能用库函数开发,相应的也…