分布式事务解决方案(强一致性)

强一致性事务概述

        分布式事务领域,最早采用的是符合CAP理论的强一致性事务方案来解决分布式事务问题,强一致性分布式事务要求在任意时刻查询参与全局事务的各个节点的数据都是一致的

典型案例:

包括DTP模型(全局事务模型)、2PC模型(两阶段提交模型)和3PC模型(三阶段提交模型)

优点:

  1. 数据一致性比较高
  2. 在任何时刻都能够查询到最新写入的数据

缺点:

  1. 存在性能问题,在分布式事务未完全提交和回滚之前,应用程序不会查询到最新的数据
  2. 实现复杂
  3. 牺牲了可用性
  4. 不适合高并发场景

DTP模型

        DTP模型是X/open组织定义的一套分布式事务标准,这套标准主要定义了实现分布式事务的规范和API,具体的实现交由相应的厂商来实现,其中定义了几个重要的概念,分别是事务、全局事务、分支事务、控制线程

  • 事务:一个事务就是一个完整的工作单元,具备ACID特性
  • 全局事务:有事务管理器管理的事务,能够一次性操作多个资源管理器
  • 分支事务:有事务管理器管理的全局事务中,每个资源管理器中独立执行的事务
  • 控制线程:执行全局事务的线程,用来关联应用程序,事务管理器和资源管理器之间三者的关系,也就是表示全局事务和分支事务的关系,通常称为事务上下文环境

DTP模型的执行流程

DTP模型定义了实现分布式事务的规范和API,主要执行流程如下:

主要定义了3个核心组件,分别为AP、TM、RM

  • AP:应用程序(Application Program)可以理解为参与DTP分布式事务模型的应用程序
  • RM:资源管理器(Resource Manager)可以理解为数据库管理系统或消息服务管理器,应用程序可以通过资源管理器对相应的资源进行有效的控制
  • TM:事务管理器(Transaction Manager)负责协调和管理DTP模型中的事务,为应用程序提供编程接口,同事管理资源管理器

        其中,AP可以跟TM、RM通信,TM和RM互相之间可以通信,DTP模型定义了XA接口,TM和RM能够通过XA接口进行双向通信。TM控制着全局事务,管理事务的生命周期并协调资源。RM控制和管理实际的资源

2PC模型

2PC模型是指两阶段提交协议模型,这种模型将整个事务流程分为Prepare阶段和Commit阶段,

P是指Prepare,即准备,C指的是Commit,即提交

  • Prepare阶段:事务管理器给每个参与全局事务的资源管理器发送Prepare消息,资源管理器要么返回失败,要么在本地执行相应的事务,将事务写入本地的Redo Log文件和Undo Log 文件,此时,事务并没有提交
  • Commit阶段:如果事务管理器收到了参与全局事务的资源管理器返回的失败消息,则直接给Prepare阶段执行成功的资源管理器发送回滚消息,否则,向每个资源管理器发送Commit消息,相应的资源管理器根据事务管理器发送过来的消息指令,执行对应的事务回滚或事务提交操作,并且释放事务处理过程中使用的锁资源

执行成功流程:

执行失败流程:

2PC模型存在的问题:

  1. 同步阻塞问题:事务的执行过程中,所有参与事务的节点都会对其占用的公共资源加锁,导致其他访问公共资源的进程或者线程阻塞
  2. 单点故障问题:如果事务管理器发生故障,则资源管理器会一直阻塞
  3. 数据不一致问题:如果在Commit阶段,由于网络或者部分资源管理器发生故障,导致部分资源管理器没有收到事务管理器发送过来的Commit消息,会引起数据不一致的问题
  4. 无法解决的问题:如果在Commit阶段,事务管理器发起Commit消息后宕机,并且唯一接收到这条Commit消息的资源管理器也宕机了,则无法确认事务是否已经提交

3PC模型

        3PC模型指的是三阶段提交,是在2PC模型的基础上改进的版本,3PC模型把2PC模型中的Prepare阶段一分为二,最终形成3个阶段:CanCommit阶段、PreCommit阶段和doCommit或者doRollback阶段,同样也分为事务执行成功和事务执行失败2种情况

事务执行成功的流程

事务执行失败的流程:

3PC模型中存在的问题:

        与2PC相比3PC主要解决了单点故障问题,并减少了事务执行过程中产生的阻塞现象,在3PC模型中,如果资源管理器无法及时收到来自事务管理器发出的消息,那么资源管理器就会执行提交事务的操作,而不是一直持有事务的资源并处于阻塞状态,但是这种机制会导致数据不一致的问题

        如果由于网络故障等原因,导致资源管理器没有及时收到事务管理器发出的Abort消息,则资源管理器会在一段时间后提交事务,这就导致了与其他接收到Abort消息并执行了事务回滚的资源管理器的数据不一致

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

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

相关文章

微软Power Automate平台将引入AI工作流

最近的微软 Build 大会展示了许多新的计划和增强功能,特别是围绕将 AI 集成到微软的产品和平台中。一个重点是扩展 Microsoft Copilot 在各种应用和服务中的功能。此外,微软还宣布对 Azure AI 进行了重大更新,旨在使云计算更加有用。虽然在 B…

aws eks理解和使用podidentity为pod授权

参考链接 https://www.amazonaws.cn/new/2024/amazon-eks-introduces-eks-pod-identity/https://aws.amazon.com/cn/blogs/aws/amazon-eks-pod-identity-simplifies-iam-permissions-for-applications-on-amazon-eks-clusters/ 先决条件 集群版本需要符合要求,如果…

SBC3568启动升级,灵活更换动画logo

今天小智将会带着大家体验如何在openharmony sdk内替换开机logo和动态动画。 1. 更换开机logo 开机logo分为uboot阶段【logo.bmp】和kernel阶段【logo_kernel.bmp】的logo两个文件,对图片的要求是:必须为bmp格式,8或者24位深,且…

3、md5比较绕过

青少年ctf:EasyMD5 1、页面是一个上传页面 2、上传两个txt文件,bp抓包 3、go发现提示要PDF文件 4、将文件类型改成PDF类 5、改文件类型提示MD5,也看出它是将文件里的内容读取比较 6、改成s878926199a和QNKCDZO 猜测后端源码: if…

Servlet的response对象

目录 HTTP响应报文协议 reponse继承体系 reponse的方法 响应行 public void setStatus(int sc) 响应头 public void setHeader(String name, String value) 响应体 public java.io.PrintWriter getWriter() public ServletOutputStream getOutputStream() 请求重定…

【东山派Vision K510开发板试用笔记】nncase的安装

概述 最近试用了百问网提供的东山派Vision开发板,DongshanPI-Vision开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板,主要用于学习使用嘉楠的K510芯片进行Linux项目开发和嵌入式AI应用开发等用途。DongshanPI-Vision开发板采用嘉楠公司…

【区块链】fisco节点运维 更新ing

基于已完成的区块链系统与管理平台搭建工作,开展区块链节点的加入与退出运维工作,具体内容如下 以下只是举例子讲 如果有其他修改没举例出来可以留言 私信 主要以比赛出题的形式讲 区块链节点输出等级为警告级,并设置日志存储阈值为100MB并…

自编译frida得一些记录

frida编译 这个过程坑肯定很多 但是只要大方向对得,解决掉每个小错误达到目的就ok得 # 就是想自己把frida代码done下来改一改 然后看看git clone gitgithub.com:frida/frida.git git fetch git checkout 14.1.3# 下载node包管理工具 apt install nvm nvm install …

脆皮之“字符函数与字符串函数”宝典

hello,大家好呀,感觉我之前有偷偷摸鱼了,今天又开始学习啦。加油!!! 文章目录 1. 字符分类函数2. 字符转换函数3. strlen的使用和模拟实现3.1 strlen 的使用3.1 strlen 的模拟1.计算器方法2.指针-指针的方…

探索LangGraph:如何创建一个既智能又可控的航空客服AI

这种设计既保持了用户控制权,又确保了对话流程的顺畅。但随着工具数量的增加,单一的图结构可能会变得过于复杂。我们将在下一节中解决这个问题。 第三部分的图将类似于下面的示意图: 状态定义 首先,定义图的状态。我们的状态和L…

Blazor 下支持 Azure AD 的多套登录方案

比如上图配置了两套不同的登录方案,各有自己的 TenantId 和 ClientId ,要同时支持他们的登录(其实在同一套 TenantId 和 ClientId 里面配置多个登录账户不就好了,但是......那套登录的管理是在客户自己的Azure AD账户管理下的&…

Python数据可视化(七)

绘制 3D 图形 到目前为止,我们一直在讨论有关 2D 图形的绘制方法和绘制技术。3D 图形也是数据可视化的 一个很重要的应用方面,我们接下来就重点讲解有关 3D 图形的实现方法。绘制 3D 图形通常需要导 入 mpl_toolkits 包中的 mplot3d 包的相关模块&#x…

【openlayers系统学习】3.6-3.7添加可视化选择器,手动选择可视化的图像源

六、添加可视化选择器(选择可视化的图像类型) 在前面的示例中,我们已经看到了同一Sentinel-2图像的真彩色合成、假彩色合成和NDVI渲染。如果能让用户从这些可视化中选择一个或更多,而不必每次都更改我们的代码,那就太…

2024年顶级算法-黑翅鸢优化算法(BKA)-详细原理(附matlab代码)

黑翅鸢是一种上半身蓝灰色,下半身白色的小型鸟类。它们的显著特征包括迁徙和捕食行为。它们以小型哺乳动物、爬行动物、鸟类和昆虫为食,具有很强的悬停能力,能够取得非凡的狩猎成功。受其狩猎技能和迁徙习惯的启发,该算法作者建立…

C++利用TinyXML读取XML文件

TinyXML是什么? TinyXML是一个轻量级的C XML解析器,它提供了一种简单的方法来解析和操作XML文档。TinyXML被设计为易于使用和集成到C项目中,并且非常适合处理小型XML文件。 以下是TinyXML的一些主要特点和优点: 轻量级: T…

0基础从前端到Web3 —— Mine Clearance Frontend(二)

在一的基础上继续往下,本篇主要是链上调用部分,让整个项目可以进行最基本的扫雷游戏。 S u i M o v e \mathit {Sui\ Move} Sui Move 链上部署的自主实现的简单扫雷游戏可以点击查看,只不过这里将区域大小扩大为了 10 20 \text {10}\ \tim…

Plesk中如何移除之前添加的域名

我这边想要移除我之前绑定到主机的域名,但是不知道如何在主机上面进行移除,由于我使用的Hostease的Windows虚拟主机产品默认带普通用户权限的Plesk面板,但是不知道如何在Plesk上操作移除域名,因为也是对于Hostease主机产品不是很了…

python给图片加上图片水印

python给图片加上图片水印 作用效果代码 作用 给图片加上图片水印图片水印的透明度,位置可自定义 效果 原始图片: 水印图片: 添加水印后的图片: 代码 from PIL import Image, ImageDraw, ImageFontdef add_watermark(in…

联盟 | 歌者 AIPPT X HelpLook携手,开启企业高效办公新时代

面对日益增长的工作负荷和追求效率优化的压力,企业知识的积累与传播显得愈发重要。如何系统化地沉淀员工与企业的知识精华?如何快速分享内外部知识?更重要的是,如何在获取这些知识后,迅速将其转化为精美的PPT&#xff…