2PC算法

2023-11-08

概述

2PC,是Two-Phase-Commit的缩写,即二阶段提交,主要解决的问题是让基于分布式架构下的所有节点在进行事务处理过程中能够保证原子性和一致性。它的核心思想是“一票否决”。

提交过程(正如它的名字,它的提交分为两个阶段)

第一阶段:事务请求。由于在形式上近似是协调者组织各参与者对一次事务操作的投票表态过程,因此这一阶段也被称为“投票阶段”

a.事务询问。协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的响应
b.执行事务。各参与者节点执行事务操作,并将Undo和Redo信息记入事务日志中
c.各参与者向协调者反馈事务询问的响应。如果参与者成功执行了事务操作,那么就反馈给协调者Yes响应,表示事务可以执行;如果参与者没有成功执行事务,那么就反馈给协调者No响应,表示事务不可以执行

第二阶段:事务提交。在第二阶段中,协调者会根据参与者的反馈情况来决定最终是否可以进行事务提交,正常情况下会包含两种可能:一是执行事务提交。二是中断事务

a. 执行事务提交。假如协调者从所有的参与者获得的反馈都是Yes响应,那么就会执行事务提交:
   i.发送提交请求。协调者向所有参与者节点发出Commit请求
   ii.事务提交。参与者接收到Commit请求后,会正式执行事务提交操作,并在完成提交之后释放在整个事务执行期间占用的事务资源
   iii.反馈事务提交结果。参与者在完成事务提交之后,向协调者发送Ack消息
   iiii.完成事务。协调者接收到所有参与者反馈的Ack消息后,完成事务提交

b. 中断事务。协调者获得的反馈只要有一个不是YES响应,就会执行回滚操作
	i.发送回滚请求。协调者向所有参与者节点发出Rollback请求
	ii.事务回滚。参与者接收到Rollback请求后,会利用其在阶段一中记录的Undo信息来执行事务回滚操作,并在完成回滚之后释放在整个事务执行期间占用的资源
	iii.反馈事务回滚结果。参与者在完成事务回滚之后,向协调者发送Ack消息
	iv. 中断事务。协调者接收到所有参与者反馈的Ack消息后,完成事务中断

2PC算法的缺点

a. 同步阻塞:二阶段提交协议存在的最明显也是最大的一个问题就是同步阻塞,这会极大地限制分布式系统的性能。在二阶段提交的执行过程中,所有参与该事务操作的逻辑都处于阻塞状态,也就是说,各个参与者在等待其他参与者响应的过程中,将无法进行其他任何操作

b. 单点问题:协调者的角色在整个二阶段提交协议中处于核心地位,因此一旦协调者出现问题,那么整个二阶段提交流程将无法运转

c. 太过保守:如果在协调者指示参与者进行事务提交询问的过程中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的话,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务,这样的策略显得比较保守。换句话说,二阶段提交协议没有设计较为完善的容错机,任意一个节点的失败都会导致整个事务的失败

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2PC算法 的相关文章

  • 一文搞懂线性回归和逻辑回归

    1 线性回归 Linear Regression 1 介绍 线性回归是机器学习中最基础 最经典的算法之一 它利用线性函数对一个或多个自变量和因变量之间关系进行建模 建模过程就是使用数据点来寻找最佳拟合线 线性回归分为两种类型 单变量线性回归
  • 数据结构之链栈

    栈介绍 首先 它是一个线性表 准确的说 应该是一个插入 删除受限制的线性表 它仅仅在表尾进行插入和删除操作的线性表 我们把这种受限制的线性表称为栈 如果栈的元素在使用时出现了元素变化不可预测的情况 有时很大 有时又很小 这种情况下 则建议使
  • 【Pytorch基础】BatchNorm常识梳理与使用

    BatchNorm 批规范化 主要用于解决协方差偏移问题 主要分三部分 计算batch均值和方差 规范化 仿射affine 算法内容如下 需要说明几点 均值和方差是batch的统计特性 pytorch中用running mean和runni
  • 计算机组成原理之运算器篇章之---比恢复余数法更好的加减交替法!详解+例子

    加减交替法 又称为不恢复余数法 是恢复余数法的一种算法的提升 步骤示例 例题 已知x 0 1011 y 0 1101 求 x y 原 y 补 0 1101 y 补 1 0011 例题 已知x 0 1011 y 0 1101 求 x y 原
  • Git:Git的一些基本操作

    文章目录 基本认识 使用方法 创建本地仓库 配置本地仓库 工作区 暂存区 版本库的概念 添加文件 版本回退 撤销修改 删除操作 基本认识 首先要对Git有一个基本的认知 Git本质上是一个版本控制器 可以对一个信息的多个版本进行一些控制 而
  • 竞赛:图解循环数组--借助循环数组进行队列的模拟实现以及循环数组的理解讲解

    文章目录 队列的模拟实现 队列是什么 实现过程 实现原理 具体代码实现 循环数组 循环数组是什么 循环数组如何实现队列 实现原理 总结 队列的模拟实现 队列是什么 队列是一种数据结构 遵循的是先进先出 后进后出的原则 基于这个原则我们可以借
  • C++:类和对象(下)---对类和对象深入一些的理解

    文章目录 构造函数 初始化列表 explicit关键字 匿名对象 构造函数 初始化列表 前面已然介绍过构造函数 但并未完全结束 构造函数有很多种写法 有带缺省参数的 有全缺省的 不带缺省参数的 但用前面的方法 都是对里面成员变量的一种赋值
  • C++:模拟实现vector以及vector的迭代器失效和拷贝问题

    文章目录 实现的功能 模拟实现 迭代器失效 隐含浅拷贝问题 实现的功能 模拟实现 由于前面实现了string 因此这里实现过程不为重点 重点为关于迭代器失效和拷贝问题 template
  • C++:类和对象(中)---默认成员函数---运算符重载---const的含义

    文章目录 默认成员函数 构造函数 析构函数 拷贝构造函数 运算符重载 赋值运算符重载 const的含义 取地址及const取地址操作符重载 默认成员函数 首先要理解什么是默认成员函数 类在什么都不写的时 编译器会生成六个默认成员函数 用户没
  • C语言: 数组指针/指针数组等相关的选择题目

    文章目录 写在前面 形参和实参 二维数组传参 字符数组 二维数组 函数指针数组 参数匹配 多级指针 写在前面 本篇总结的是和指针相关的有难度的选择题 并对这些题进行解析和分析 形参和实参 下面程序的运行结果是什么 include
  • error: expected ‘{‘ before ‘;‘ token

    要求在分号 前加上前括号 原因1 在哪里确实漏了 原因2 要求把 等格式改为
  • Linux:入门学习知识及常见指令

    文章目录 入门介绍 操作系统的概念 Linux机器的使用 Linux上的指令 对文件知识的补充 文件的定义和一些含义 文件和目录的存储 绝对路径和相对路径 ls指令 pwd指令 cd指令 touch指令 mkdir指令 rmdir指令 rm
  • Linux:基础开发工具之Makefile和缓冲区的基本概念

    文章目录 动静态库 自动化构建代码 缓冲区 原理实现 具体实现 动静态库 首先要知道什么是链接 C程序中 并没有定义printf的函数实现 且在预编译中包含的stdio h中也只有该函数的声明 而没有定义函数的实现 系统把这些函数实现都被做
  • elasticsearch 去重查询并进行分页

    去重查询的俩种方式 在进行去重查询时 原来的目的是对于查询出的结果中一模一样的数据进行去重 但是各种百度发现都是对于单一字段的去重查询 最后索性新增了一个字段 将其他字段拼接了起来 从而根据拼接的字段进行去重查询 1 使用字段聚合 top
  • 2PC算法

    概述 2PC 是Two Phase Commit的缩写 即二阶段提交 主要解决的问题是让基于分布式架构下的所有节点在进行事务处理过程中能够保证原子性和一致性 它的核心思想是 一票否决 提交过程 正如它的名字 它的提交分为两个阶段 第一阶段
  • C语言:(含大量图解)你真的了解结构体吗?

    文章目录 结构体 结构体的定义 结构体大小计算 结构体的对齐规则 关于对齐规则的解释 为什么C语言要这样进行大小设定 平台移植原因 追求高性能 修改默认对齐数 结构体传参问题 结构体 结构体的定义 结构体是一些值的集合 这些值被称为成员变量
  • C语言:扫雷游戏简单实现

    目录 定义的一些变量 设计思路 为什么设计两个数组棋盘 为什么游戏是9 9但设计数组要设计11 11 初始化函数 为什么要把雷的棋盘初始化为0 打印函数 布置雷 排除雷 解释为什么先前初始化记数字棋盘时选择0和1 可以存在的优化 递归函数实
  • 系统分析与设计——UML图总结

    一 前言 期末考试之前 我复习系统分析与设计的时候对UML图做了一些知识汇总 现在放到博客上 如果有不对或不恰当的地方 欢迎各位指正 本文仅仅起记录作用 可随意转载 荣幸之至 截图来自网络或是老师的PPT 二 概述 系统模型的三个主要部分
  • 数据结构:栈和队列的实现和图解二者相互实现

    文章目录 写在前面 栈 什么是栈 栈的实现 队列 什么是队列 队列的实现 用队列实现栈 用栈模拟队列 写在前面 栈和队列的实现依托的是顺序表和链表 如果对顺序表和链表不清楚是很难真正理解栈和队列的 下面为顺序表和链表的实现和图解讲解 手撕图
  • Git:Git中的远程操作和标签管理--分布式版本控制系统

    文章目录 理解分布式版本控制系统 克隆仓库 远程推送 拉取远程仓库 配置Git 标签管理 本篇主要总结关于Git中远程操作的相关事项 理解分布式版本控制系统 在进行远程操作前 首先要理解什么是分布式版本控制系统 理解这个问题时要思考这样的问

随机推荐

  • 学习matlab(十八)——小波分析

    小波分析克服了短时傅里叶变换在单分辨率上的缺陷 具有多分辨率分析的特点 下面对小波分析的基本理论进行介绍 包括连续小波变换 离散小波变换 多分辨分析和小波包分析 最后介绍在小波分析中常用的小波 小波变换采用随频率的时间 频率窗口 是进行信号
  • VC++ 设定Windows程序自启动(非管理员权限)

    Windows程序自启动方式有很多种 任务计划 注册表 启动项等等 创建任务计划和启动项 都需要程序具有管理员权限才能写入 在此略过 只介绍启动项方式 要实现启动项方式 必须要知道当前用户下启动项方式的目录 我们才好将程序或程序的快捷方式存
  • react 首页加载loading

    首页加载loading 放在 root里面 代码如下
  • C语言学习7——文件操作 文件的打开、读写、关闭 文件指针的使用

    关于C语言文件操作方面的知识 主要涉及到以下几个方面 文件的打开和关闭 文件的读写 文件的定位 下面我将详细讲解每个方面 文件的打开和关闭 在C语言中 需要使用fopen 函数来打开一个文件 该函数的原型如下 FILE fopen cons
  • secureCRT设置按钮栏

    secureCRT通过设置按钮栏可以把许多繁琐的命令简化成一个按钮 一步到位提高工作效率 详情如下 1 img http dl2 iteye com upload attachment 0094 3355 9805c794 f8e6 376
  • Day 5 - 元组字典习题

    1 声明一个字典保存一个学生的信息 学生信息中包括 姓名 年龄 成绩 单科 电话 性别 男 女 不明 stu name xxx age 18 grade 60 tel 12345678 sex 男 女 不明 2 声明一个列表 在列表中保存6
  • java-collection中的null,isEmpty

    只使用java utils包的isEmpty 第一种情况 实例化list 但是size为空 List
  • 【华为机试真题 JAVA】求满足条件的最长子串的长度-100

    编程题目 100分 求满足条件的最长子串的长度 2022 Q1 Q2考试题 时间限制 C C 1000ms 其他语言 2000ms 空间限制 C C 128MB 其他语言 256MB 64bit IO Format lld 本题可使用本地I
  • 一键排序Linux内存占用

    top c 大写M M
  • 华为鸿蒙os系统服务器炸了,华为鸿蒙OS短时间内威胁不到麒麟操作系统和统信UOS系统...

    麒麟操作系统和统信UOS系统是当前国产Linux操作系统的两座大山 它们鼎足而立 麒麟操作系统多用于高端部署 而统信UOS有更强大的Deepin社区支撑 比如麒麟操作系统可用于大型计算机 各类政企终端 而统信UOS受到华为笔记本的青睐 被预
  • 【教程】DGL中的子图分区函数partition_graph讲解

    转载请注明出处 小锋学长生活大爆炸 xfxuezhang cn 目录 函数形式 函数作用 函数内容 函数入参 函数返参 使用示例 实际上官方的函数解释中就已经非常详细了 函数形式 def partition graph g graph na
  • uniapp---- 微信小程序中获取当前地理位置(高德地图)

    uniapp 微信小程序中获取当前地理位置 高德地图 1 在manifest json中选择微信小程序配置 勾选上位置接口 2 在manifest json中选择源码视图 添加permission和requiredPrivateInfos
  • 《effective c++》总结

    文章目录 前言 条款02 尽量以const enum inline替换 define 条款03 尽可能使用const 条款04 确定对象被使用前已先被初始化 条款05 了解c 默默编写并调用哪些函数 条款06 若不想使用编译器自动生成的函数
  • Android开发下遇到的一些奇葩问题处理

    环境 MAC Android Studio Q1 Gradle Home not found 网上查到的解决方案比较少一些 如 gradle wrapper properties 配置错误等等 Solution 我的解决是 无意中点了Run
  • 希沃展台如何使用_视频展台的操作步骤

    键盘控制 1 开启展示台及外围设备 按select键选择信号源 当body指示灯亮时 输出信号为摄像头 当external指示灯亮时 输出信号为外部信号源 开机时默认为摄像头 2 将被演示物放置在展台上 调整摄像头对准被摄物体 3 根据镜头
  • K8S单master部署四:Kubelet+kube-proxy

    服务器角色分配 角色 地址 安装组件 master 192 168 142 220 kube apiserver kube controller manager kube scheduler etcd node1 192 168 142 1
  • 创新实训(21)——推荐算法的评估

    前言 昨天使用Mohout推荐引擎实现了用户的协同过滤算法 今天使用昨天实现的算法计算一下推荐的准确率以及查全率 查准率 算法评判标准 召回率 recall 与查准率 precision A 检索到的 相关的 搜到的也想要的 B 未检索到的
  • uni-app onBackPress 小程序 解决方案 uni-app返回

    onBackPress 只支持APP和H5 但不支持小程序 可以用onUnload生命周期解决 页面销毁的时候执行方法
  • 史上最简单的 SpringCloud 教程

    转载请标明出处 原文首发于 https www fangzhipeng com springcloud 2018 08 30 sc f1 eureka 本文出自方志朋的博客 一 spring cloud简介 鉴于 史上最简单的Spring
  • 2PC算法

    概述 2PC 是Two Phase Commit的缩写 即二阶段提交 主要解决的问题是让基于分布式架构下的所有节点在进行事务处理过程中能够保证原子性和一致性 它的核心思想是 一票否决 提交过程 正如它的名字 它的提交分为两个阶段 第一阶段