【分布式事务】分布式事务其他解决方案——2PC

目录

  • 2PC
    • 解释
    • 例子
      • 分析
      • 回到IT系统中
    • XA 方案
      • 执行流程
      • DTP 模型
      • 交互模式
  • 总结

2PC

解释

  • 2PC 即两阶段提交协议,是将整个事务流程分为两个阶段,准备阶段(Prepare phase)、提交阶段(commit phase),
  • 2 是指两个阶段,P 是指准备阶段,C 是指提交阶段。

例子

  • 张三和李四好久不见,老友约起聚餐,饭店老板要求先买单,才能出票。
  • 这时张三和李四分别抱怨近况不如意,囊中羞涩,都不愿意请客,这时只能AA。
  • 只有张三和李四都付款,老板才能出票安排就餐。
  • 但由于张三和李四都是铁公鸡,形成了尴尬的一幕:

分析

  • 准备阶段:老板要求张三付款,张三付款。老板要求李四付款,李四付款。

  • 提交阶段:老板出票,两人拿票纷纷落座就餐。

  • 例子中形成了一个事务,若张三或李四其中一人拒绝付款,或钱不够,店老板都不会给出票,并且会把已收款退回。

  • 整个事务过程由事务管理器和参与者组成,店老板就是事务管理器,张三、李四就是事务参与者,事务管理器负责决策整个分布式事务的提交和回滚,事务参与者负责自己本地事务的提交和回滚。

回到IT系统中

  • 在计算机中部分关系数据库如 Oracle、MySQL 支持两阶段提交协议,如下图:
    在这里插入图片描述在这里插入图片描述

    • 准备阶段(Prepare phase):
      • 事务管理器给每个参与者发送 Prepare 消息,每个数据库参与者在本地执行事务,并写本地的 Undo/Redo 日志,此时事务没有提交。
      • Undo 日志是记录修改前的数据,用于数据库回滚,Redo 日志是记录修改后的数据,用于提交事务后写入数据文件
    • 提交阶段(commit phase):
      • 如果事务管理器收到了参与者的执行失败或者超时消息时,直接给每个参与者发送回滚(Rollback)消息;
      • 否则,发送提交(Commit)消息;
      • 参与者根据事务管理器的指令执行提交或者回滚操作,并释放事务处理过程中使用的锁资源。
      • 注意:必须在最后阶段释放锁资源。

XA 方案

  • 2PC的传统方案是在数据库层面实现的,如 Oracle、MySQL 都支持 2PC 协议
  • 为了统一标准减少行业内不必要的对接成本,需要制定标准化的处理模型及接口标准,国际开放标准组织 Open Group 定义了分布式事务处理模型DTP(Distributed Transaction Processing Reference Model)。
  • 以新用户注册送积分为例来说明
    在这里插入图片描述

执行流程

  1. 应用程序(AP)持有用户库和积分库两个数据源。
  2. 应用程序(AP)通过 TM 通知用户库 RM 新增用户,同时通知积分库RM为该用户新增积分,RM 此时并未提交事务,此时用户和积分资源锁定。
  3. TM 收到执行回复,只要有一方失败则分别向其他 RM 发起回滚事务,回滚完毕,资源锁释放。
  4. TM 收到执行回复,全部成功,此时向所有 RM 发起提交事务,提交完毕,资源锁释放。

DTP 模型

  • DTP 模型定义如下角色

    • AP(Application Program):即应用程序,可以理解为使用 DTP 分布式事务的程序。
    • RM(Resource Manager):即资源管理器,可以理解为事务的参与者,一般情况下是指一个数据库实例,通过资源管理器对该数据库进行控制,资源管理器控制着分支事务。
    • TM(Transaction Manager):事务管理器,负责协调和管理事务,事务管理器控制着全局事务,管理事务生命周期,并协调各个 RM。
  • 全局事务是指分布式事务处理环境中,需要操作多个数据库共同完成一个工作,这个工作即是一个全局事务。

  • DTP 模型定义TM和RM之间通讯的接口规范叫 XA,简单理解为数据库提供的 2PC 接口协议,基于数据库的 XA 协议来实现 2PC 又称为 XA 方案

交互模式

以上三个角色之间的交互方式如下:

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

总结

整个 2PC 的事务流程涉及到三个角色 AP、RM、TM。

  • AP 指的是使用 2PC 分布式事务的应用程序;
  • RM 指的是资源管理器,它控制着分支事务;TM 指的是事务管理器,它控制着整个全局事务。
  1. 在准备阶段 RM 执行实际的业务操作,但不提交事务,资源锁定
  2. 在提交阶段 TM 会接受 RM 在准备阶段的执行回复,只要有任一个RM执行失败,TM 会通知所有 RM 执行回滚操作,否则,TM 将会通知所有 RM 提交该事务。提交阶段结束资源锁释放。

XA方案的问题:需要本地数据库支持XA协议。 资源锁需要等到两个阶段结束才释放,性能较差。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PyMuPDF 操作手册 - 01 从PDF中提取文本

文章目录 一、打开文件二、从 PDF 中提取文本2.1 文本基础操作2.2 文本进阶操作2.2.1 从任何文档中提取文本2.2.2 如何将文本提取为 Markdown2.2.3 如何从页面中提取键值对2.2.4 如何从矩形中提取文本2.2.5 如何以自然阅读顺序提取文本2.2.6 如何从文档中提取表格内容2.2.6.1 提…

经典sql

一、连续登录问题 问题:1)、每个用户连续登录最大天数 2)、连续登录大于三天的用户数 分析:本质都是计算用户连续登录天数 方案一:利用排序窗口 select a.user_id,a.date_rslt,count(1) as cnt from (select t.…

定个小目标之刷LeetCode热题(22)

这道题最容易想的就是排序后再遍历,但是时间复杂度就不是O(n)了,所以还是得用更优的解法,直接看题解,它是使用了HashSet,遍历数组,对于每一个数x,如果不存在x - 1则进入内循环,否则跳…

java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能?

java智慧工地系统源码 智慧工地标准之一:环境监测 告别灰头土脸、智慧工地环境监测系统都包括哪些功能? 智慧工地环境监测系统是一套集成了物联网、大数据和云计算技术的系统,主要用于实时监测和管理建筑工地的环境状况。以下是该系统的一些核…

金融科技行业的融资趋势、投资者关注及未来预测

一、金融科技行业的融资趋势 金融科技行业的融资趋势近年来展现出强劲的增长势头,具体表现在以下几个方面: 融资规模持续扩大: 根据《全球金融科技投融资趋势报告(2023年上半年)》,2023年上半年全球金融科技行业投融资事件总次数…

语言大模型:开启自然语言处理的新篇章

随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著的成果。其中,语言大模型(Language Models)作为近年来崛起的一种新型神经网络模型,已经在文本生成、机器翻译、情感分析等多个NLP任…

Vue02-第一个Vue程序

第一个Vue程序 1、什么是MVVM MVVM(Model-View-ViewModel)是一种软件设计模式,由微软WPF(用于替代WinForm,以前就是用这个技术开发桌面应用程序的)和Silverlight(类似于Java Applet&#xff0…

基于Java的冬奥会科普平台

开头语:你好,我是计算机学姐码农小野。如果你对冬奥会科普平台感兴趣或有其他技术需求,欢迎随时私信我。 开发语言:Java 数据库:MySQL 技术:Java、B/S架构 工具:MyEclipse、MySQL 系统展示…

ANSYS导入图片建模教程

将一张PNG或JPG格式的图片导入到ANSYS内,根据图片内容生成几何模型可通过下面的思路来实现。 首先选取一张需要导入的图片文件。这里采用随机成长算法生成了一张多孔结构图片,图片样式及绘图参数如下。 利用CAD图像导入插件将图片处理成AutoCAD文件&a…

Zygote进程的理解

Zygote进程是安卓系统的一个重要进程,由init进程创建而来;另外系统里的重要进程(system_server等)都是由zygote进程fork的,所有的app进程也是由zygote进程fork的。 一、C 里的fork函数 fork是Linux里面创建子进程的函…

电脑怎么录音?分享2种音频录制方法

在日常生活和工作中,我们经常需要录制电脑上的音频,无论是为了记录会议内容、保存网络课程,还是为了制作自己的音频素材,录音功能都显得尤为重要。那么电脑怎么录音?本文将详细介绍2种方法教你如何在电脑上进行录音&am…

这个是 2024 Idea最新激活码

idea的激活与安装 操作如下: ① 打开网站:https://web.52shizhan.cn 切换到:正版激活码,点击获取 ② 获取后的激活码,到idea里打开help->register 打开弹窗,如图 切换的activate code 输入激活码&…

预埋螺栓抗滑移系数检测 内六角螺栓扭矩系数检测

螺栓检测范围:螺栓,高强螺栓,地脚螺栓,不锈钢螺栓,六角头螺栓,管片螺栓,膨胀螺栓,化学螺栓,镀锌螺栓,植筋螺栓,普通螺栓,钢结构螺栓&a…

Ubuntu乌班图安装VIM文本编辑器工具

系列文章目录 Ubuntu-24.04-live-server-amd64安装界面中文版 Ubuntu-24.04-live-server-amd64启用ssh Ubuntu安装qemu-guest-agent 文章目录 系列文章目录前言一、安装VIM?二、VIM基本设置总结 前言 从centos转到Ubuntu发现默认安装没有vi 一、安装VIM&#xff1…

Springboot整合Kafka消息队列服务实例

一、Kafka相关概念 1、关于Kafka的描述 Kafka是由Apache开源,具有分布式、分区的、多副本的、多订阅者,基于Zookeeper协调的分布式处理平台,由Scala和Java语言编写。通常用来搜集用户在应用服务中产生的动作日志数据,并高速的处…

Erlang程序设计[Part1-Part2 chapter4]

前言: 环境安装 Erlang Shell,CSDN搜教程 Erlang Shell实操 启动 erl Erlang Shell以表达式为执行单位? 结束标志 .加上回车 Part1 为何用 Erlang chapter 1 什么是并发 并发vs并行 并发 单核cpu运行多个进程 一次运行一个 并行 多…

css-Echarts图表柱状图,X轴横坐标值显示不完全问题

1.问题 在Echarts图表中当横坐标数值过多,或者数值过长时会导致部分横坐标不显示。数据量少或简单会默认显示完全,当放大时会导致部分横坐标隐藏。 更改第一个Mon字段名 会发现偶数横坐标显示隐藏; 2.解决方法 2.1 在x横坐标中添加interval…

CPU占用100%的解决办法

上课,先看问题 这里看有个.logrotate的进程占用CPU最高,这里就需要把这个清理掉 执行 ps aux | grep logrotate然后将这个进程杀掉 kill -9 3194067然后再看CPU占有率就下来了 下课

2024北京智源大会开幕,智源推出大模型全家桶及全栈开源技术基座新版图,大模型先锋集结共探AGI之路

2024年6月14日,第六届“北京智源大会”在中关村展示中心开幕。 北京智源大会是智源研究院主办的“AI内行顶级盛会”,以“全球视野、思想碰撞、前沿引领”为特色,汇聚海内外研究者分享研究成果、探寻前沿知识、交流实践经验。2024北京智源大会…

STM32学习和实践笔记(36):DAC数模转换实验

1.STM32F1 DAC简介 DAC(Digital to analog converter)即数字模拟转换器,它可以将数字信号转换为模拟信号。它的功能与ADC相反。在常见的数字信号系统中,大部分传感器信号被转化成电压信号,而 ADC 把电压模拟信号转换成…