面试系列分布式事务:谈谈2PC的理解

news2024/11/17 0:01:07

 2PC其实就是两阶段提交的分布式事务中事务类型,两阶段提交就是分两个阶段提交:

第一阶段询问各个事务数据源是否准备好。
第二阶段才真正将数据提交给事务数据源。

为了保证该事务可以满足ACID,就引入一个协调者(Cooradinator)。其他的节点被称为参与者(Participant)。协调者负责调度参与者的行为,并最终决定这些参与者是否要把事务进行提交。 处理流程如下:

 阶段一

a) 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复。
b) 各参与者执行事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)。
c) 如参与者执行成功,给协调者反馈 yes,否则反馈 no。

阶段二

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(rollback)消息;否则发送提交(commit)消息。

两种情况处理如下:

情况1:当所有参与者均反馈 yes,提交事务
a) 协调者向所有参与者发出正式提交事务的请求(即 commit 请求)。
b) 参与者执行 commit 请求,并释放整个事务期间占用的资源。
c) 各参与者向协调者反馈 ack(应答)完成的消息。
d) 协调者收到所有参与者反馈的 ack 消息后,即完成事务提交。


情况2:当有一个参与者反馈 no,回滚事务
a) 协调者向所有参与者发出回滚请求(即 rollback 请求)。
b) 参与者使用阶段 1 中的 undo 信息执行回滚操作,并释放整个事务期间占用的资源。
c) 各参与者向协调者反馈 ack 完成的消息。
d) 协调者收到所有参与者反馈的 ack 消息后,即完成事务。

缺陷问题

1) 性能问题:所有参与者在事务提交阶段处于同步阻塞状态,占用系统资源,容易导致性能瓶颈。
2) 可靠性问题:如果协调者存在单点故障问题,或出现故障,提供者将一直处于锁定状态。
3) 数据一致性问题:在阶段 2 中,如果出现协调者和参与者都挂了的情况,有可能导致数据不一致。

优点:尽量保证了数据的强一致,适合对数据强一致要求很高的关键领域。(其实也不能100%保证强一致)。
缺点:实现复杂,牺牲了可用性,对性能影响较大,不适合高并发高性能场景。

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

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

相关文章

【OpenCV-Python】教程:3-9 轮廓(2)轮廓特征

OpenCV Python 轮廓特征 【目标】 轮廓矩轮廓周长、轮廓面积轮廓拟合、轮廓凸包、轮廓凹凸性检查外接矩形、最小包围圈椭圆拟合、直线拟合 【代码】 周长、面积、矩 第一幅图像为原始轮廓图像,第二幅图像为轮廓点拟合图像(精度为周长的1/10&#xff…

Docker——Windows版本Docker安装

目录 一、简介 1.1 Docker如何解决大型项目依赖关系复杂,不同组件依赖的兼容性问题? 1.2 Docker如何解决开发、测试、生产环境有差异的问题 1.3 Docker 和 虚拟机的区别 1.4 Docker架构 1.5 总结 二、Docker安装(Windows版) 2.1…

电容笔可以用什么代替?好用电容笔品牌推荐

在互联网办公、互联网教学等领域,电容笔再次成为全球流行的电子产品。用平替电容笔来代替苹果的电容笔吗?实际上,我们可以考虑买一支平替电容笔,而不用再买昂贵的苹果 Pencil。一支平替电容笔,一两百块钱,比…

spring web 简单项目数据库查询 纯注解版替代web.xml

关键词句:第一个spring 简单项目 纯注解 包括替代web.xml 文件 第一个spring mvc web 简单项目 纯注解 用纯注解写spring web 简单项目 纯注解写web 项目 spring 写数据库 查询 注解方式 spring 数据接链接池 用的阿里的 spring jdbc jdbcTemplate类使用…

python--星际大战(基础版)

实现功能: 运用python的pygame模块实现上方出现一群体的敌机,每个敌机会随机不定时发射子弹,下方是玩家飞机,通过控制方向和发射子弹来摧毁所以敌机,在游戏开始前会有一个计时器(3秒)计时结束&…

3、Pinpoint-Agent端注册服务到Server端

0、此节简介 此章节大部分操作是在另一台服务器上,vm7。 Agent端配置 项目发布 注册到Pinpoint服务端 接口调用,服务端查看详情 1、Agent端配置 Agent推荐使用和Pinpoint服务端同样的版本。 1.1、下载Pinpoint-Java-Agent包 Github下载链接:h…

第七章 规范化:Eslint + Prettier + Husky

第七章 规范化:Eslint Prettier Husky 为了项目能够长期健康的发展。代码的规范性建设非常重要。只有纪律严明的队伍才能不断打胜仗。 规范制定容易,执行的难度很大。 项目规范可以分为: 编码规范;项目结构规范;…

hyper-v虚拟机ubuntu ssh配置

环境描述: 本地机:win10系统 linux机:hyper-v 虚拟机中的ubuntu 1、ssh 安装和启用 //安装ssh sudo apt-get install ssh//启用ssh service ssh start//查看ssh状态 service ssh status 2、网络工具安装和ip查看 //安装网络工具 sudo ap…

[附源码]SSM计算机毕业设计基于篮球云网站JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

$.ajax异步请求总结

$.ajax()简单介绍 AJAX 是一种与服务器交换数据的技术,可以在不重新载入整个页面的情况下更新网页的一部分 $.ajax()是万能的,是最基础,最全面的那个;剩余的方法都是针对某种特定场景下的$.ajax()的简化形式 $.ajax()、$.post()…

Java环境变量学习

0. 找到你的安装路径 C:\Program Files\Java 这种语言的开发工具,重要的东西建议就安装在C盘 0.1 里面有什么? 其实就是很多java命令而已 用来编译的,运行的 JDK开发用的JRE运行用的 就像python中给你开发工具的同时,再给你一个…

[附源码]java毕业设计学习资源共享与在线学习系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Jetpack Compose中的state核心思想

Compose 中的状态 应用的“状态”是指可以随时间变化的任何值。这是一个非常宽泛的定义,从 Room 数据库到类的变量,全部涵盖在内。 所有 Android 应用都会向用户显示状态。下面是 Android 应用中的一些状态示例: 聊天应用中最新收到的消息…

Unity3D : 本地坐标系,世界坐标系,和TransformPoint,TransformVector,TransformDirection的区别

目录 一、世界坐标系与本地坐标系 二、srcGameObject.transform.TransformPoint(Vector3 vec) 三、srcGameObject.transform.TransformVector(Vector3 vec) 四、srcGameObject.transform.TransformDirection(Vector3 vec) 五:示例 一、世界坐标系与本地坐标系 世界坐标很…

[LabVIEW]圖像內的物件計算_Count objects

NI雖然是以賣硬件為主的公司,但其在軟件(LabVIEW)的著墨也相當深厚,尤其是各類應用模組的更新速度和對應功能。 每每不經意地碰觸到新版本的LabVIEW,都會不由自主地翻閱和嘗試新增模組。 本文藉由兩個模組串接簡易製作一支圖像計數程式&…

七、模型评估指标

当训练好模型之后,检测模型训练效果如何,评价指标有哪些?通过查阅相关资料,我将以这五个指标来对所训练的模型进行评估,下图是评价指标运行结果图。 一、混淆矩阵(Confusion Matrix) 解释&…

【网安神器篇】——Whatweb指纹识别工具

作者名:Demo不是emo 主页面链接:主页传送门创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座右…

CV—cs231n二刷

文章目录cv应用优化训练牛顿法HOGYOLO风格迁移GAN语义分割实例分割LSTMDL框架GPU相关cs231n.stanford.edu cv应用 图像分类、目标检测、人脸识别、语义分割、风格迁移、GAN生成、VQA多模态、点云分割、姿态估计、游戏学习等 优化训练 避免后期训练还在大幅震荡&…

[carla] GNSS传感器与Carla坐标系 转换方法

文章目录方法1:通过python API直接获取转换后坐标1.1 GNSS传感器消息-内容介绍1.2 在线获取方法1.3 完整代码方法2-通过离线读取转换关系的方式转换2.1 转换类代码和使用方法2.2 转换矩阵保存和读取2.3 运行结果2.5 注意事项附件 所有地图的转换矩阵参考链接:方法1:通过python …

工作中学到的一些小点

1.结构体对齐 记得之前面试的时候被问过这个问题【汗】 这个结构体占多大 struct sExample {char c;int n; };占8字节,问有没有办法让它占5个字节? 有 #pragma pack(push) //保存对齐状态 #pragma pack(1) //设定为1字节对齐struct sExample {char c;…