当前位置: 首页 > article >正文

二阶段提交

二阶段提交

二阶段提交(英语:Two-phase Commit)是指,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。

二阶段过程

在这里插入图片描述

在两阶段提交过程中,主要分为了两种角色协调者(coordinator)和参与者(participants),协调者既可以作为库嵌套到应用程序中,也可以作为一个单独的服务。

2PC(Two Phase Commit)协议通常分为两个阶段进行,提交请求阶段(Commit Request Phase)或称投票阶段(Voting phase)、与提交阶段(Commit Phase);
1.提交请求阶段(Commit Request Phase),协调者发送请求给参与者,通知参与者提交或取消事务,参与者进入投票过程,每个参与者回复给协调者自己的投票:同意(事务在本地执行成功)或取消(事务本地执行失败)。

2.提交阶段(Commit Phase),协调者对上一阶段参与者的投票结果进行表决,当所有投票为“同意”时提交提交事务,否者中止事务,并通知参与者,参与者接到通知后执行相应的操作。

二阶段提交的缺点

  • 同步阻塞:在执行过程中,所有节点都是事务阻塞的,第三方资源都处于阻塞状态。
  • 单点故障:一旦协调者出现故障,参与者会一直阻塞下去。
  • 数据不一致:但协调者发出commit请求之后,部分参与者发生故障,这会导致只有部分参与者接收到commit请求,其他故障参与者未接收到请求,于是整个分布式便出现数据不一致的现象。

二阶段无法解决的问题

当协调者出错,同时参与者也出错时,两阶段无法保证事务执行的完整性。


http://www.kler.cn/a/135651.html

相关文章:

  • Java复习42(PTA)
  • 使用 Vue 配合豆包MarsCode 实现“小恐龙酷跑“小游戏
  • 回归分析学习
  • 记录日志中logback和log4j2不能共存的问题
  • Docker无缝更新Zentao
  • 小程序中引入下载到本地的iconfont字体图标加载不出来问题解决
  • thonny的汉字编码是UTF-8,如何才能转为GB2312?
  • LeetCode - 622. 设计循环队列(C语言,顺序存储结构,配图)
  • 逻辑漏洞(越权)
  • MySQL 的执行原理(五)
  • AI 游戏工具收集
  • 设计模式(二)-创建者模式(1)-单例模式
  • uniapp Android如何授权打开系统蓝牙Bluetooth?
  • 【ES6标准入门】JavaScript中的模块Module语法的使用细节:export命令和imprt命令详细使用,超级详细!!!
  • vue统一登录
  • C# 依赖注入如何实现
  • 数据结构【DS】栈
  • 音视频项目—基于FFmpeg和SDL的音视频播放器解析(十三)
  • 二维偏序问题
  • 从傅里叶变换,到短时傅里叶变换,再到小波分析(CWT),看这一篇就够了(附MATLAB傻瓜式实现代码)
  • 多维时序 | MATLAB实现PSO-BiGRU-Attention粒子群优化双向门控循环单元融合注意力机制的多变量时间序列预测
  • 毕业设计ASP.NET 2368酒店信息管理系统【程序源码+文档+调试运行】
  • 腐蚀监测常用技术及作用
  • 解决word之间复制公式时,公式编辑器变成图片
  • 【算法】堆排序
  • (BMS)电池管理系统技术研究与仿真