当前位置: 首页 > news >正文

二阶段提交事务的实现和缺点

背景

说起分布式事务,我们最绕不开的一个话题就是该不该使用分布式事务,而要理解为什么做出使用与否的决定,就必须要提到分布式事务中的最经典的实现:两阶段提交事务,本文我们就简答介绍下这个两阶段提交事务以及它的优缺点

技术实现

所谓的两阶段提交事务顾名思义就是分成两个阶段完成的事务,它包括两种角色: 事务管理者和事务参与者,事务管理者往往是运行应用程序的进程本身,而事务参与者就是各个不同节点的数据库管理系统,我们以Mysql数据库和Oracle数据库作为事务参与者为例来看一下两阶段提交事务的流程图
在这里插入图片描述

阶段一:

1.1事务管理器首先向各个参与者发送prepare命令来让参与者(此处的Mysql数据库和Oracle数据库)准备好数据库资源,包括锁定必要的数据记录,这个阶段参与者一旦做出是或者否的决定都是不可撤销的,也就是说如果回答了是,那么表明所有的准备工作包括锁定所有必要的数据记录等已经完成
1.2 事务管理器收到各个参与者对prepare准备命令的回复后,确定整个事务是要提交还是终止(只要有一个参与者回复不OK,整个事务就要终止),并把这个决定(提价或者终止)写入持久性存储设备(一般是本地磁盘),写入磁盘的目的是防止此时事务管理器崩溃,事务处于一种中间状态

阶段二:

2.1 事务管理器决定事务是提交还是终止后,把这个消息发送给所有的参与者,事务参与者收到消息后进行事务提交或者回滚。

总结

前面讲述的就是两阶段提交事务的执行流程,那么这个流程中有哪些缺点呢:
1.事务管理者(大部分情况下就是应用进程自身)是一个单点,一旦发生故障,那就是只能等待它自身的重启恢复
2.由于事务管理器(大部分情况下就是应用进程自身)会把事务提交或者终止的决定保存到本地磁盘中,所以应用进程自身不再是一个无状态的服务器,也就是重启时不能随意重启一个运行相同代码的服务器取代,因为他需要读取磁盘上的事务日志文件来决定事务的状态
3.两阶段事务中对于事务参与者来说,第一阶段已经对数据记录加锁并等待第二阶段的事务提交或者终止命令,这一过程中有可能要经过很长时间的等待,导致数据库参与者长时间的锁定数据记录,对整个数据库的性能造成极大的性能损失
4.当数据库参与者第一阶段已经对数据记录加锁并等待第二阶段的事务提交或者终止命令的过程中,事务管理器崩溃并且真的没法恢复时(比如事务管理器的本地磁盘损坏时,这是极有可能的,因为事务管理器大部分情况下就是应用进程自身),那么数据库就会长期处于不一致状态(比如第一阶段锁定的记录完全无法释放-需要人工介入),这不仅仅影响数据库的性能而且对于数据库的一致性状态都造成了破坏。

以上的缺点就是我们不使用分布式事务二阶段提交的原因,当然公司的DBA更是强烈的不推荐应用使用二阶段提交事务的原因,毕竟谁会愿意半夜三更起来杀死处于不一致状态的事务呢?谁愿意数据库的性能因为几个分布式事务就下降到极低的水平呢

相关文章:

二阶段提交事务的实现和缺点

背景 说起分布式事务,我们最绕不开的一个话题就是该不该使用分布式事务,而要理解为什么做出使用与否的决定,就必须要提到分布式事务中的最经典的实现:两阶段提交事务,本文我们就简答介绍下这个两阶段提交事务以及它的优缺点 技术…...

定点数的表示和运算

文章目录真值(有正负号)和机器数(0正1负)原码整数小数补码负数的补数正数的补数[y]~补~ > [-y]~补~反码小结移码移位运算加减法运算溢出判断真值(有正负号)和机器数(0正1负) 无符…...

java虚拟机内存分布

java虚拟机内存分布 Java虚拟机在执行java程序的过程中会把它所管理的内存划分为如下若干个不同的数据区域。 1.程序计数器 程序计数器是线程私有的,它占用的空间相对较小,用来记录当前线程字节码执行到哪一步。字节码解释器通过改变这个计数器的值来获…...

最完整的小红书带货笔记——垂直模式

最完整的小红书带货笔记——垂直模式,小红书直播复盘怎么做?#直播带货笔记 第1篇,带你解锁直播复盘5大要点! #小红书店铺#小红书运营 小红书怎么发带货笔记? 做小红书带货的同学注意了,我们带货一定要发笔…...

SpringBoot实战——个人博客项目

目录 一、项目简介 二、项目整体架构 数据库模块 后端模块 前端模块 三、项目具体展示 四、项目的具体实现 1、一些准备工作 🍎数据库、数据表的创建 🍎设置数据库和MyBatis的配置 🍎将前端项目引入到当前项目中 2、登录注册模块 &…...

浅谈Spring中事务管理器

由于事务部分代码在设计上整体比较简单,我自己觉得它在设计上没有什么特别让我眼前一亮的东西,所以下文更多的是侧重执行流程,能理解事务管理器等一众概念以及相关的变量含义,真正遇到Bug会调试,知道在什么地方打断点就…...

Python练习系统

用python给自己做个练习系统刷题吧! #免费源码在文末公众号哈# 选择题 def xuanze():global flag2if flag21:def insert():numvar1.get()questionvar2.get()choicevar3.get()answervar4.get()with open(d:\\练习系统\\练习三3.1.pickle,rb) as file:lst1pickle.lo…...

Transformer学习笔记1

Transformer学习笔记1 翻译中,每个词翻译时更看重哪个原词? ## 注意力机制的一般性原理 典型的注意力机制 hard one-hot形式,但是太过专一 soft 都分布,但是太过泛滥 local attention 自注意力机制:self-atte…...

软件测试简历个人技能和项目经验怎么写?(附项目资料)

目录 前言 个人技能 项目实战经验 项目名称:苏州银行项目(webapp) 项目描述: 项目名称:中国平安项目(webapp) 项目描述: 项目名称:苏宁易购项目(webapp&a…...

C语言运算符优先级和结合性一览表

所谓优先级就是当一个表达式中有多个运算符时,先计算谁,后计算谁。 运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符()和逗号运算符 简单记就是:! > 算术运…...

Java8介绍

Java 8 Java 8 把函数式编程里的一些思想融入到 Java 的语法中,让我们可以用更少的时间写出高效的代码。 Java 8的优势: 代码行更少Lambda表达式Stream API便于并行减少空指针JVM优化兼容老版本 Lambda Lambda表达式是一段可以传递的代码&#xff0…...

Java 基准测试

Java 基准测试maven依赖简单使用执行多个函数BenchmarkMode(Mode.AverageTime) 运行模式OutputTimeUnit(TimeUnit.NANOSECONDS) 报告结果时间单位Warmup(iterations 5,time 1,timeUnit TimeUnit.SECONDS) 预热参数Measurement(iterations 5,time 1,timeUnit TimeUnit.SEC…...

普通护照出国免签及落地签国家和地区

1.互免签协议的国家(双向免签) 序号 协议国 限制条件 生效日期 1 阿联酋 停留不超过30天 2018.01.16 2 巴巴多斯 停留不超过30天 2017.06.01 3 巴哈马 停留不超过30天 2014.02.12 4 白俄罗斯 停留不超过30天 2018.8.10 5 波黑 停留不超…...

20230219 质心和重心的区别和性质

质心:(无需重力场的前提)所有质点的位置关于它们的质量的加权平均数。 重心:(需要重力场的前提)重力对系统中每个质点关于重心的力矩之和为零。 质心: xˉ∑i1nmixi∑i1nmi,yˉ∑i1nmiyi∑i1nmi…...

maven多环境配置

maven多环境配置 参考网址: https://mp.weixin.qq.com/s/-e74bd2wW_RLx7i4YF5M2w https://mp.weixin.qq.com/s/3p53kBHqys58QdMme6lR4A 项目地址 https://gitee.com/shao_ming314/maven-profile-dir 项目说明 该项目基于目录进行多环境配置 , 具体的配置文件在 src/resource…...

设计模式之中介模式与解释器模式详解和应用

目录1 中介模式详解1.1 中介模式的定义1.1.1 中介者模式在生活场景中应用1.1.2 中介者模式的使用场景1.2 中介模式的通用实现1.2.1 类图设计1.2.2 代码实现1.3 中介模式应用案例之聊天室1.3.1 类图设计1.3.2 代码实现1.4 中介者模式在源码中应用1.4.1 jdk中Timer类1.5 中介者模…...

2023年全国最新交安安全员精选真题及答案1

百分百题库提供交安安全员考试试题、交安安全员考试预测题、交安安全员考试真题、交安安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、单选题: 1.对施工组织设计中的安全技术措施或者专项施工方案是否…...

chrome插件开发备忘录

文章目录前言要点通信方式注意事项参考前言 第一次接触到插件开发,起因是我用了十多年的一键上传需要升级了。之前的版本来自于有道云,是通过在书签栏加一个书签,然后将上传功能注入到当前页面的方式来实现的。一直也用得挺好,挺…...

实例1:控制树莓派板载LED灯闪烁

实例1:控制树莓派板载LED灯闪烁 实验目的 通过背景知识学习,了解四足机器人mini pupper搭载的微型控制计算机:树莓派。通过对树莓派板载LED灯的状态读写控制,熟悉树莓派本身的操作及Linux中文件的读写。掌握常见函数time.sleep(…...

华为OD机试题 - 最大排列(JavaScript)

最近更新的博客 华为OD机试题 - 字符串加密(JavaScript) 华为OD机试题 - 字母消消乐(JavaScript) 华为OD机试题 - 字母计数(JavaScript) 华为OD机试题 - 整数分解(JavaScript) 华为OD机试题 - 单词反转(JavaScript) 使用说明 参加华为od机试,一定要注意不要完全背…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

条件运算符

C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...