2PC(两阶段提交)方案

news2024/11/25 7:00:45

XA方案

2PC的传统方案是在数据库层面实现的,如Oracle、MySQL都支持2PC协议,为了统一标准减少行业内不必要的对接成本,需要制定标准化的处理模型及接口标准,国际开放标准组织Open Group定义了分布式事务处理模型DTP(Distributed Transaction Processing Reference Model),基于数据库的XA协议来实现2PC又称为XA方案。

XA方案分为准备阶段、提交阶段

1、在准备阶段资源管理器执行实际的业务操作,但不提交事务,资源锁定。

2、在提交阶段事务管理器会接受资源管理器在准备阶段的执行回复,只要有任一个资源管理器执行失败,事务管理器会通知所有资源管理器执行回滚操作,否则,事务管理器将会通知所有资源管理器提交该事务。提交阶段结束资源锁释放。

XA方案的问题

1、需要数据库支持XA协议。

2、资源锁需要等到两个阶段结束才释放,性能较差。

Seata的AT事务模式

Seata 是一款开源的分布式事务解决方案,将为用户提供 AT、TCC、SAGA 和 XA 事务模式。

AT事务模式也是一种2PC方案。

AT事务模式

一阶段:

业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。

二阶段:

提交异步化,非常快速地完成。

回滚通过一阶段的回滚日志进行反向补偿。

seata事务控制流程图

tx1 先开始,开启本地事务,拿到本地锁,更新操作 m = 1000 - 100 = 900。tx1提交本地事务前,先拿到该记录的 全局锁 ,本地提交释放本地锁。

tx2 后开始,开启本地事务,拿到本地锁,更新操作 m = 900 - 100 = 800。本地事务提交前,tx2需要拿该记录的 全局锁 。tx1 全局提交前,该记录的全局锁被 tx1 持有,tx2 需要重试等待 全局锁,tx2拿到该记录的全局锁后,才能提交本地事务 。

Seata实现2PC与传统2PC的差别:

  1. 传统2PC需要数据库支持XA协议;Seata的AT模式是在应用程序导入Seata依赖即可,以中间件方式实现2PC,不依赖数据库实现。

  1. 两阶段提交方面,传统2PC无论第二阶段的决议是commit还是rollback,事务性资源的锁都要保持到阶段二完成才释放。而Seata的做法是在阶段一就将本地事务提交,这样就可以省去阶段二持锁的时间,稍微提高了效率。

简单用了下Seata,感觉性能有点低,每秒事务数一上来,很容易发生拿不到全局锁,抛出异常。

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

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

相关文章

“遥感+”蓝碳储量估算、红树林信息提取

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…

Fluent Python 笔记 第 13 章 正确重载运算符

运算符重载的作用是让用户定义的对象使用中缀运算符(如 和 |)或一元运算符(如 - 和 ~)。说得宽泛一些,在 Python 中,函数调用(())、属性访问(.)和元素访问 / 切片 ([])也是运算符,不过本章只讨论一元运算符和中缀运算符。 13.1 运算符重载基…

Tomcat安装、IDEA发布web项目及通过浏览器访问servlet程序

tomcat安装 在官网上下载tomcat安装包,推荐下载8.5版本 解压安装到任意磁盘,记住安装时的目录 在系统里找到高级系统设置——高级——环境变量——系统变量里的path——编辑——新建,内容填写tomcat中的bin路径的绝对路径。 在bin文件夹找…

【3D目标检测】Pseudo-Stereo for Monocular 3D Object Detection in Autonomous Driving

目录概述细节背景与整体流程图像级别生成特征级别生成损失函数学习深度感知的特征概述 本文是基于单目图像的3D目标检测方法。 【2021】【MonoDLE】 研究的问题: 能否借助立体图像检测算法提高单目图像检测的效果如何实现右侧图像的生成 解决的方法: 受启发于伪…

java基于springboot+vue微信小程序的学生健康管理

任何系统都要遵循系统设计的基本流程,本系统也不例外,同样需要经过市场调研,需求分析,概要设计,详细设计,编码,测试这些步骤,基于Java语言、微信小程序技术设计并实现了学生健康管理小程序。系统主要包括系统首页、个人中心、学生管理、健康档案管理、体检报告管理、健康评估管…

案例分享 | 某券商利用AI技术进行告警关联分析(上)

本内容来自公众号“布博士”------(擎创科技资深产品专家)背景:作为大型券商企业之一,某券商对深入数字化转型,以及对应用、网络、主机、操作系统、中间件、用户使用体验等的全面可观测性要求越来越强烈。由于可观测性…

机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究

机器学习在预测脊髓型颈椎病中的应用:一项28名参与者的事后初步研究 Machine Learning for the Prediction of Cervical Spondylotic Myelopathy: A Post Hoc Pilot Study of 28 Participants 简单说:训练了两个模型:1)预测脊髓型颈椎病诊断&#xff0…

音乐 APP 用户争夺战,火山引擎 VeDI 助力用户体验升级!

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,并进入官方交流群 国内数字音乐市场正在保持稳定增长。 根据华经产业研究院数据报告显示,2020 年数字音乐市场规模为 357.3 亿元,到 2022 年市场规模已增长至 482.7 …

2月编程语言排行榜新鲜出炉,谁又摘得桂冠?

近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠?一起来看看吧! TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴…

LabVIEW中的软件定时应用可以达到怎样的精度

LabVIEW中的软件定时应用可以达到怎样的精度有一个基于软件定时的数据采集应用。采集任务在一个循环结构中完成,使用LabVIEW的定时函数。每次循环间的间隔应该是一个常量,但没有得到优于1ms的定时分辨率。解答:LabVIEW 或LabWindows/CVI定时函数使用的是…

PHP如何实现HTTP服务器

一般来讲,PHP很少谈到“实现HTTP服务”的说法,因为从早期的CGI到后来的PHP-FPM,官方已经给出了最稳定的HTTP解决方案,你只要配合一个Apache或Nginx类的服务器就能实现稳定的HTTP服务。 但PHP并非不能实现HTTP服务,一般…

知识付费小程序怎么做_分享知识付费小程序的作用

在线知识付费产业的主要业务逻辑是基于用户的主动学习需求,为其提供以跨领域基础知识与技能为核心的在线知识服务,提升其达到求知目的的效率。公众号和小程序的迅速发展,又为知识付费提供了技术支持,从而促进了行业的进一步发展。…

UE 虚幻引擎 【DT Subsystem】 插件说明

在虚幻中自带有子系统,可能实现自动实例化。 但是子系统只能在C中继承实现,本插件的目的则是可以直接在蓝图中创建并使用子系统。 官方子系统说明参考: 虚幻引擎编程子系统 | 虚幻引擎5.1文档 (unrealengine.com)https://docs.unrealengine…

Studio 3T 2023.1.1 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端

The professional GUI, IDE and client for MongoDB 请访问原文链接:https://sysin.org/blog/studio-3t-2023/,查看最新版。原创作品,转载请保留出处。 作者主页:www.sysin.org Studio 3T,MongoDB 的专业 GUI、IDE 和…

桌面电脑如何快速体验DataEase?

DataEase是一款人人可用的数据可视化分析工具,致力于帮助用户快速分析数据并洞察业务趋势,从而实现业务的改进与优化。但有一些用户提出,目前大部分的部署场景都是将DataEase部署在服务器中,自己只有一台桌面电脑,是不…

初始C++(五):

文章目录一.auto关键字1.1auto关键字用法1.2auto关键字的小细节1.3h获取变量类型二.范围for(语法糖)三.nullptr和NULL一.auto关键字 1.1auto关键字用法 auto这个关键字其实非常简单,用处就是能自动帮你去匹配类型,像下面这段代码: int mai…

Jetpack技术Hilt【实现解耦 】

Hilt是什么? Hilt 是基于 Dagger2 的针对 Android场景定制化 的框架。 这有点像什么? RxAndroid 是 RxJava 的Android平台定制化扩展。Andorid虽然由Java、Kotlin构成,但是它有很多平台的特性,比如它有 Java开发 所不知道的 Cont…

嵌入式开发:AI和Chat GPT改变嵌入式系统的3种方式

嵌入式软件开发是一个已经发展了很多年的领域,它已经见证了许多技术进步。然而,ChatGPT和其他人工智能技术的引入将以前所未有的方式彻底改变该领域。在这篇博文中,我们将探索ChatGPT和AI将改变嵌入式开发的三种方式。方式1 —— CHATGPT/AI自…

Redis之搭建一主多从

搭建redis一主多从的过程 1.在相应位置创建一个文件夹存放redis配置文件 mkdir myredis2.复制redis配置文件到此文件夹中 cp /opt/redis/redis/bin/redis.conf /opt/myredis/redis.conf3.新建三个配置文件 touch redis6379.conf touch redis6380.conf touch redis6381.conf4…

测试开发之Django实战示例 第九章 扩展商店功能

第九章 扩展商店功能在上一章里,为电商站点集成了支付功能,然后可以生成PDF发票发送给用户。在本章,我们将为商店添加优惠码功能。此外,还会学习国际化和本地化的设置和建立一个推荐商品的系统。本章涵盖如下要点:建立…