分布式事务-两阶段提交2PC
2PC协议就是两阶段提交,用来解决分布式事务,分为两个阶段,分别为Prepare和Commit,也是PC由来。
第一阶段Prepare 提交事务请求
如图所示,主要流程有以下三个方面
-
询问:事务协调者(Manager)向所有的事务参与者发送事务请求,询问是否可能执行事务,然后等待各个待各个事务参与者的响应。
-
执行:各个事务参与者在接收到事务协调者的请求后,开始执行事务操作,并将undo、redo信息记录到事务日志中去。
-
响应:如果参与者成功执行了事务并记录了undo、redo日志,则向事务协调者返回YES,否则返回NO,当然了在实际中也可能存在参与者宕机就一直得不到响应的情况。
第二阶段Commit 执行事务提交
两种情况,一种是成功执行commit,另一种是执行失败rollback
执行成功commit,流程图
-
commit请求:事务协调者向所有的事务参与者发送事务commit请求。所有的事务参与者在接收到协调者的请求后,执行事务提交操作,执行完成后释放在事务执行期间占用的系统资源。
-
反馈结果:参与者执行完事务提交后向协调者发送Ack响应。
-
完成事务:协调者在接收到所有事务参与者的Ack响应后完成事务提交。
执行失败rollback
在执行Prepare阶段,难免的可能会出现如下情况:
-
参与者执行事务失败
-
参与者服务宕机
-
协调者与参与者网络通信中断
如果出行以上情况,这时协调者就无法接收到参与者的YES响应或者某一个参与者返回了NO响应,这时协调者就进入到了事务rollback回滚阶段,对事务进行回滚操作。如下图
-
rollback请求:事务协调者向所有的事务参与者发送事务rollback回滚请求。
-
参与者在接收到协调者的rollback回滚操作后,会根据在Prepare阶段记录的undo日志进行事务回滚,完成事务回滚后会释放掉在事务回滚执行期间占用的所有资源。
-
结果反馈:参与者完成事务rollback回滚后会向协调者发送Ack响应。
-
完成事务:事务协调者在接收到所有事务参与者的Ack响应后完成事务rollback回滚。
可能存在的问题
-
同步阻塞:在参与者等待协调者的指令的时候,实质上是在等待参与者的响应,在这期间参与者就不能进行任何其他的操作,也就是阻塞了其运行。如果发生了协调者与参与者不能进行网络通信的情况,参与者一直接收不到协调者的指令,那么参与者将会一直阻塞下去。
-
单点:在2PC中,一切请求都来自协调者,所以协调者的地位是至关重要的,如果协调者宕机,那么就会使参与者一直阻塞并一直占用资源。如果协调者也是分布式,使用选主方式提供服务,那么在一个协调者挂掉后,可以选取另一个协调者继续后续的服务,可以解决单点问题。但是,新协调者无法知道上一个事务的全部状态信息(例如已等待Prepare响应的时长等),所以也无法顺利处理上一个事务。
-
数据不一致:Commit事务过程中,Commit/Rallback请求可能因为协调者宕机或协调者与参与者网络问题丢失,那么就导致了部分参与者没有收到Commit/Rallback请求,而其他参与者则正常收到执行了Commit/Rallback操作,没有收到请求的参与者继续阻塞。这时参与者之间的数据就不再一致了。
-
环境可靠性依赖:协调者Prepare请求发出后,等待响应,然而如果有参与者宕机或与协调者之间的网络中断,都会导致协调者无法收到所有参与者的响应,那么在2PC中,协调者会等待一定时间,然后超时后,会触发事务回滚。在这个过程中,协调者和所有参与者都是出于阻塞的。这种机制对网络问题常见的现实环境来说太苛刻了。
相关文章:

分布式事务-两阶段提交2PC
2PC协议就是两阶段提交,用来解决分布式事务,分为两个阶段,分别为Prepare和Commit,也是PC由来。 第一阶段Prepare 提交事务请求 如图所示,主要流程有以下三个方面 询问:事务协调者(Manager)向所有的事务参与…...

初识Spring (Spring 核心与设计思想)
文章目录 什么是 Spring什么是容器什么是 IoC理解 Spring IoCDI 概念 什么是 Spring Spring 官网 官方是这样说的: Spring 让每个人都能更快、更轻松、更安全地进行 Java 编程。春天的 专注于速度、简单性和生产力使其成为全球最受欢迎Java 框架。 我们通常所说的 Spring 指的…...

智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.教与学算法4.实验参数设定5.算法结果6.参考文献7.…...

Bitcoin SV 和 Bitcoin Core 之间首次跨链原子交换
我们已经执行了 Bitcoin SV 和 Bitcoin Core 之间的首次原子交换。 这一成就代表了比特币 SV 的重大进步,以去信任的方式促进了与其他区块链的无缝互操作性。 图片源自Gemini 在上一篇文章中,我们解释了原子交换的高级理论。 我们深入研究了使用哈希时间…...

RT-DETR改进 | 2023 | InnerEIoU、InnerSIoU、InnerWIoU、InnerDIoU等二十余种损失函数
论文地址:官方Inner-IoU论文地址点击即可跳转 官方代码地址:官方代码地址-官方只放出了两种结合方式CIoU、SIoU 本位改进地址: 文末提供完整代码块-包括InnerEIoU、InnerCIoU、InnerDIoU等七种结合方式和其AlphaIoU变种结合起来可以达到二十…...

JDBC编程基础
JDBC编程基础 JDBC介绍创建JDBC项目的步骤1.引入依赖2.注册驱动3.获取数据库连接4.获取sql执行对象 JDBC 常用 API 详解sql执行对象PreparedStatement作用 事务管理结果集对象 JDBC项目demo测试 JDBC介绍 每个数据库都会提供一组API来支持程序员实现自己客户端,自己…...
Linux shell命令
Linux shell命令 1、Shell简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问…...

Vue 3 面试经验分享
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...

Vue简易的车牌输入键盘,可以根据需要修改
效果图如下: 代码如下: <template><div><div class"carNoBoxInput"><div style"padding: 6px;border: 2px solid #fff;border-radius: 6px;margin: 6px 3px 6px 6px;"><input class"inputBox"…...

十分钟搭建VScode C/C++运行环境
一、下载配置vscode 1.下载安装VScode 地址:https://code.visualstudio.com/download 下载后,运行安装程序 (VSCodeUserSetup-{version}.exe)。这只需要一分钟。安装程序会将 Visual Studio Code 添加到环境变量中%,可以使用CMD键入“code”…...

控制台gbk乱码
引用IntelliJ IDEA中 统一设置编码为utf-8或GBK-CSDN博客 特别注意file coding 的文件path和java的编码格式 配置...

Springboot日志-logback
logback-spring.xml的配置项 共有一个父标签、两种属性、三个节点: 一个父标签:configuration 两种属性:contextName和property 三个节点:appender、root、logger 日志级别 日志级别从低到高分为TRACE < DEBUG < INFO < WARN &…...

六、Lua 运算符
文章目录 一、Lua 运算符(一)算术运算符(二)关系运算符(三)逻辑运算符(四)其他运算符 二、运算符优先级 一、Lua 运算符 运算符是一个特殊的符号,用于告诉解释器执行特定…...
Android frameworks 开发总结十一
1.修改GMS的setup wizard 1.1 找到需要修改的文件 打开vendor/partner_gms/apps/GmsSampleIntegration/res/values/config.xml文件。以Arashi R为例: <resources><string name="wizard_script_uri" translatable="false">android.resource…...

学嵌入式,已经会用stm32做各种小东西了,下一步是什么
学嵌入式,已经会用stm32做各种小东西了,下一步是什么,研究stm32的内部吗? 针对题主这种类型的,首先我想提出几个技术问题。 1,除了那几个常用的外设,stm32上集成的众多外设是否都有实际的使用经…...
Java面试题10
1.MyBatis 中 #{}和 ${}的区别是什么? #{} 是预编译的占位符,MyBatis会将其转化为一个占位符参数,安全性较高,可以防止 SQL注入; ${} 是字符串替换,直接将内容替换到SQL语句中,不会进行参数处理…...

DBeaver连接MySQL提示“Public Key Retrieval is not allowed“问题解决方式
更新时间:2023年10月31日 11:37:53 作者:产品人小柒 dbeaver数据库连接工具,可以支持几乎所有的主流数据库.mysql,oracle.sqlserver,db2 等等,这篇文章主要给大家介绍了关于DBeaver连接MySQL提示"Public Key Retrieval is not allowed"问…...

振弦式轴力计和振弦采集仪组成的安全监测解决方案
振弦式轴力计和振弦采集仪组成的安全监测解决方案 振弦式轴力计和振弦采集仪是一种常用的结构安全监测工具,可以用于评估建筑物、桥梁、隧道或其他结构的结构健康状态和安全性能。这种监测方案较为先进、精确,并且能够监测长期的结构反应,因此…...
卡尔曼滤波
通过 Eigen 矩阵运算实现线性卡尔曼滤波。模拟的是一辆带火箭发动机的汽车,一开始沿着X轴匀速运动,到X轴中间开启火箭发动机匀加速向Y轴起飞。同理可以仿真(x,y,z,yaw,pitch,raw) 6自由度的真实飞行情况 #include <iostream&g…...

不受平台限制,Sketch 网页版震撼登场
Sketch 是一种基于 Mac 的矢量图形编辑器,可用于数字设计。其主要功能包括无损矢量编辑、完美像素精度和数百个插件同步功能,可导出预设和代码。它是目前流行的页面交互协作设计工具。但是 Sketch 最大的缺点是对 Windows/PC 用户不友好。严格来说&#…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...