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

news2024/11/26 3:49:31

目录

  • 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协议。 资源锁需要等到两个阶段结束才释放,性能较差。

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

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

相关文章

探索AgentUniverse:蚂蚁集团发布的多体Agent构建工厂

在迅速发展的AI领域,多体智能系统因其通过协调工作处理复杂任务的能力而受到广泛关注。最近,蚂蚁集团发布了一款名为AgentUniverse的开源框架,旨在构建各种智能体,包括法律咨询智能体、事件解读智能体、行业分析智能体和财报生成智…

从零到一:Python自动化测试的详细指南!

引言: Python是一种功能强大且易于学习和使用的编程语言,它非常适合用于自动化测试。本文将从零开始,通过详细的步骤和规范,介绍如何在Python中实施高质量的自动化测试。我们将探讨测试策略的制定、测试框架的选择、测试用例的编…

表达式的格式化

表达式:一条具有明确结果的代码语句 在字符串前面加上前缀f,表示这是一个格式化字符串,可以在字符串中直接引用变量,并使用{}来表示这些变量的位置。例如: name "Alice" age 30 print(f"My name is …

30. 光纤耦合器

导论: 物理光学传播(POP)可用于计算光纤耦合效率。 设计流程: 光束建模和聚焦 在系统选项中选择系统孔径,在系统孔径下选择“入瞳直径”,并输入“4”。 设置0视场,选择角度。 加入1um波长。…

使用 Mask R-CNN 进行血细胞分割

介绍 血细胞分析是诊断各种医学疾病的重要步骤,从感染和贫血到更严重的疾病如白血病。传统上,这一过程是通过老方法进行的——实验室技术员通过显微镜查看血涂片玻片,花费几个小时。这一过程不仅令人乏味,还容易出现人为错误&…

基于Eclipse+JSP+SSH+Mysql开发的实验室设备管理系统

基于EclipseJSPSSHMysql开发的实验室设备管理系统 项目介绍💁🏻 实验室教师端(管理员端)集成了多个核心功能模块,包括通知管理、预约和借用记录管理、实验室管理以及设备信息管理。管理员可以发布和删除通知公告&#…

力控算法每日一练:209. 长度最小的子数组(java)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 class Solution {public int minSu…

YOLOv10改进 | 注意力篇 | YOLOv10改进CA注意力机制

1.CA介绍 摘要:最近关于移动网络设计的研究已经证明了通道注意力(例如,挤压和激励注意力)对于提升模型性能的显着有效性,但它们通常忽略了位置信息,而位置信息对于生成空间选择性注意力图很重要。 在本文中,我们通过将位置信息嵌入到通道注意力中,提出了一种新颖的移动…

为什么构造costVolume中常用逆深度采样

原因:在现实世界中,深度值分布并不均匀。距离相机较远的物体,其深度值变化较慢,而距离较近的物体,深度值变化较快。均匀采样可能会导致成本体积中远处的深度级别具有更多的噪声和不确定性,而近处的深度级别…

NLP自然语言处理课程设计—基于实体识别的智能任务系统

NLP课程设计-基于实体识别的智能任务系统 前言一、数据获取可行性分析和需求分析1. 数据获取可行性分析2. 需求分析 二、程序主要NLP技术2.1 文本分类技术2.2 中文命名实体识别2.2.1 BiLSTM(双向长短期记忆网络)2.2.2 CRF(条件随机场&#xf…

MYSQL 四、mysql进阶 1(mysql逻辑架构以及查询流程)

一、mysql的逻辑架构 1. 逻辑架构剖析 1.1 服务器处理客户端请求 mysql是典型的c/s架构,即 client/server 架构,不论是客户端进程和服务器进程是采用哪种方式进行通信,最后实现的效果都是:客户端进程向服务器进程发送一段文本&am…

30天学会QT---------------大项目之在线考试系统

前段时间真的很忙很忙,忙完这段时间,总算是有空来写文章了,开始写的时候我就以为能够有时间准备和写这个,但是发现有时候忙着忙着就忘记了,没有办法来写项目,真的是非常尴尬。 现在有时间了,就有充分的时间来写了。 为了避免笔记断更,我决定先存稿来写。 1、如何规划项…

打造完美Mac多屏视界,BetterDisplay Pro一键掌控!

BetterDisplay Pro for Mac是一款专为Mac用户打造的显示器管理与优化软件,旨在为用户带来卓越的视觉体验和工作效率。它凭借强大的功能和简洁易用的界面,成为了Mac用户优化显示器设置的得力助手。 一、全方位管理与优化 BetterDisplay Pro for Mac支持…

【python】OpenCV—Segmentation

文章目录 cv2.kmeans牛刀小试 cv2.kmeans cv2.kmeans 是 OpenCV 库中用于执行 K-Means 聚类算法的函数。以下是根据参考文章整理的 cv2.kmeans 函数的中文文档: 一、函数功能 cv2.kmeans 用于执行 K-Means 聚类算法,将一组数据点划分到 K 个簇中&…

DGit介绍

参考地址:http://githubengineering.com/introducing-dgit/ DGit是“Distributed Git”的简写,即分布式Git。 众所周知,Git本身就是分布式的,任何的Git仓库备份都是包含该项目所有历史版本的所有的文件,分支&#xff…

SOLIDWORKS 2024正版软件:新增功能介绍

随着科技的飞速发展,计算机辅助设计(CAD)软件在工业设计领域扮演着越来越重要的角色。SOLIDWORKS作为3D CAD软件提供商,其每一次版本更新都带来了一系列创新功能和改进,旨在为用户提供更有效、更智能、更协同的设计体验…

雨量监测预警系统:非接触式测量防汛预警

TH-SW2雨量监测预警系统是一种用于监测降雨量的重要工具,对于防汛预警工作具有重要意义。该系统采用非接触式测量技术,可以实时监测雨量数据,并自动预警,以便及时采取防汛措施,确保人民生命财产安全。 系统组成 1. 雨…

嵌入式实训day6

1、 from machine import Pin from neopixel import NeoPixel import timeif __name__"__main__"#创建RBG灯带控制对象,包含5个像素(5个RGB LED)rgb_led NeoPixel(Pin(4,Pin.OUT),5)#定义RGB颜色RED(255,0,0)GREEN(0,2…

Vue项目 [WDS] Disconnected解决方法

Vue项目出现这个错误:[WDS] Disconnected! 1.对项目运行本身造成什么实质性的影响 2.红色的提示摆在那里确实不太好看 解决 打开 Application->LocalStorage,在key上添加loglevel:webpack-dev-server,在Value上添加SILENT。

项目计划

1.什么是项目计划? 2.软件项目计划的作用 3.项目计划的内容 4.项目计划的主要内容 5.滚动计划方法 6.WBS方法 7.软件项目的特点 8.制定计划的要点 9.直接成本和间接成本 10.为什么说项目计划不是一个文档,而是一个持续的策划过程? 项目计划不…