面试官:2PC和3PC有什么区别?

1f153e9188fc0694408c660ef37d0e20.png

本文内容已收录至我的面试网站:www.javacn.site

在分布式事务中,通常使用两阶段协议或三阶段协议来保障分布式事务的正常运行,它也是 X/Open 公司定义的一套分布式事务标准。

X/Open 公司是由多家国际计算机厂商所组成的联盟组织,它建立之初是为了向 UNIX 环境提供标准。

分布式事务是指在分布式系统中,多个节点之间进行的事务操作。比如在分布式系统中,用户在下单时,需要同时创建订单信息和减库存的操作,然而创建订单信息和减库存是分布在不同服务器和不同数据库中的,如下图所示:f9c8997520f1c278672de3e37137bbaa.png此时我们就需要一个分布式事务介入,保证所有操作,要么一起提交,要么一起回滚。

1.两阶段提交

两阶段提交(Two-Phase Commit,简称 2PC)是一种分布式事务协议,确保所有参与者在提交或回滚事务时都处于一致的状态。2PC 协议包含以下两个阶段:

  1. 准备阶段(prepare phase):在这个阶段,事务协调者(Transaction Coordinator)向所有参与者(Transaction Participant)发出准备请求,询问它们是否准备好提交事务。参与者执行所有必要的操作,并回复协调者是否准备好提交事务。如果所有参与者都回复准备好提交事务,协调者将进入下一个阶段。如果任何参与者不能准备好提交事务,协调者将通知所有参与者回滚事务。

  2. 提交阶段(commit phase):在这个阶段,如果所有参与者都已准备好提交事务,则协调者向所有参与者发送提交请求。参与者执行所有必要的操作,并将其结果记录在持久性存储中。一旦所有参与者都已提交事务,协调者将向它们发送确认请求。如果任何参与者未能提交事务,则协调者将通知所有参与者回滚事务。

2PC 协议可以确保分布式事务的原子性和一致性,但是其效率较低,可能会出现阻塞等问题。因此,在实际应用中,可以使用其他分布式事务协议,如 3PC(Three-Phase Commit)或 Paxos 协议来代替。

两阶段提交问题

两阶段提交存在以下几个问题:

  1. 同步阻塞问题:执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。也就是说从投票阶段到提交阶段完成这段时间,资源是被锁住的。

  2. 单点故障:由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。

  3. 数据不一致问题:在 2PC 最后提交阶段中,当协调者向参与者发送 commit 请求之后,发生了局部网络异常或者在发送 commit 请求过程中协调者发生了故障,这会导致只有一部分参与者接受到了 commit 请求。而在这部分参与者接到 commit 请求之后就会执行 commit 操作。但是其他部分未接到 commit 请求的机器则无法执行事务提交,于是整个分布式系统便出现了数据不一致性的现象。

2.三阶段提交

三阶段提交(Three-Phase Commit,简称3PC)是在 2PC 协议的基础上添加了一个额外的阶段来解决 2PC 协议可能出现的阻塞问题。3PC 协议包含三个阶段:

  1. CanCommit 阶段(询问阶段):在这个阶段,事务协调者(Transaction Coordinator)向所有参与者(Transaction Participant)发出 CanCommit 请求,询问它们是否准备好提交事务。参与者执行所有必要的操作,并回复协调者它们是否可以提交事务。

  2. PreCommit 阶段(准备阶段):如果所有参与者都回复可以提交事务,则协调者将向所有参与者发送PreCommit 请求,通知它们准备提交事务。参与者执行所有必要的操作,并回复协调者它们是否已经准备好提交事务。

  3. DoCommit 阶段(提交阶段):如果所有参与者都已经准备好提交事务,则协调者将向所有参与者发送DoCommit 请求,通知它们提交事务。参与者执行所有必要的操作,并将其结果记录在持久性存储中。一旦所有参与者都已提交事务,协调者将向它们发送确认请求。如果任何参与者未能提交事务,则协调者将通知所有参与者回滚事务。

与 2PC 协议相比,3PC 协议将 CanCommit 阶段(询问阶段)添加到协议中,使参与者能够在 CanCommit 阶段发现并解决可能导致阻塞的问题。这样,3PC 协议能够更快地执行提交或回滚事务,并减少不必要的等待时间。需要注意的是,与 2PC 协议相比,3PC 协议仍然可能存在阻塞的问题。

3.两阶段提交 VS 三阶段提交

2PC 和 3PC 是分布式事务中两种常见的协议,3PC 可以看作是 2PC 协议的改进版本,相比于 2PC 它有两点改进:

  1. 引入了超时机制,同时在协调者和参与者中都引入超时机制(2PC 只有协调者有超时机制);

  2. 3PC 相比于 2PC 增加了 CanCommit 阶段,可以尽早的发现问题,从而避免了后续的阻塞和无效操作。

也就是说,3PC 相比于 2PC,因为引入了超时机制,所以发生阻塞的几率变小了;同时 3PC 把之前 2PC 的准备阶段一分为二,变成了两步,这样就多了一个缓冲阶段,保证了在最后提交阶段之前各参与节点的状态是一致的。

4.数据一致性问题和解决方案

3PC 虽然可以减少同步阻塞问题和单点故障问题,但依然存在数据一致性问题(概率很小),而解决数据一致性问题的方案有很多,比如 Paxos 算法或柔性事物机制等。

4.1 Paxos 算法

Paxos 算法是一种基于消息传递的分布式一致性算法,并在 2013 年获得了图灵奖。图灵奖(ACM A.M. Turing Award)是计算机科学领域最高荣誉之一,由美国计算机协会(ACM)于 1966 年设立,每年颁发一次,表彰对计算机科学领域做出杰出贡献的人士或团体。简单来说,Paxos 算法是一种分布式共识算法,用于在分布式系统中实现数据的一致性和共识,保证分布式系统中不同节点之间的数据同步和一致性。Paxos 算法由三个角色组成:提议者、接受者和学习者。当一个节点需要发起一个提议时,它会向其他节点发送一个提议,接受者会接收到这个提议,并对其进行处理,可能会拒绝提议,也可能会接受提议。如果有足够多的节点接受了该提议,那么提议就会被确定下来,并且通知给所有学习者,最终所有节点都会达成共识。Paxos 算法看起来很简单,但它实际上是非常的复杂。Paxos 算法应用的产品也很多,比如以下几个:

  • Redis:Redis 是一个内存数据库,使用 Paxos 算法实现了分布式锁服务和主从复制等功能。

  • MySQL:MySQL 5.7 推出的用来取代传统的主从复制的 MySQL Group Replication 等。

  • ZooKeeper:ZooKeeper 是一个分布式协调服务,使用 Paxos 算法实现了分布式锁服务和数据一致性等功能。

  • Apache Cassandra:Cassandra 是一个分布式数据库系统,使用 Paxos 算法实现了数据的一致性和复制等功能。

  • Google Chubby:Chubby 是 Google 内部使用的分布式锁服务,使用 Paxos 算法实现了分布式锁服务和命名服务等功能。

4.2 柔性事务

柔性事务机制:允许一定时间内不同节点的数据不一致,但要求最终一致的机制。柔性事物有 TCC 补偿事物、可靠消息事物(MQ 事物)等。

小结

在分布式事务中,通常使用两阶段或三阶段提交协议来保障分布式事务的正常执行。两阶段协议包含准备阶段和提交阶段,然而它存在同步阻塞问题、单点故障和数据一致性问题。而三阶段协议可以看作是两阶段协议的改进版,它将两阶段的准备阶段一分为二,多了一个询问阶段,保证了提交阶段之前各参与节点的状态是一致的,同时引入了超时机制,减少了同步阻塞问题发生的几率。但 2PC 和 3PC 都存在数据一致性问题,此时可以采用 Paxos 算法或柔性事务机制等方案来解决事务一致性问题。

参考 & 鸣谢

https://pdai.tech/md/arch/arch-z-transection.html

特殊说明

以上内容来自我的《Java 面试突击训练营》,这门课程是有着 14 年工作经验(前 360 开发工程师),9 年面试官经验的我,花费 4 年时间打磨完成的一门视频面试课

整个课程从 Java 基础到微服务 Spring Cloud、从实际开发问题到场景题应有尽有,包含模块如下:

07800ea939180eb349bdda7f6945d99a.png

训练营系统的带领大家把 Java 常见的面试题过一遍,遇到一个问题,把这个问题相关的内容都给大家讲明白,并且视频支持永久观看和一直更新。并且面试训练营还提供 10 大就业服务。

上完训练营的课程之后,基本可以应对目前市面上绝大部分公司的面试了,想要了解详情,加我微信:GG_Stone【备注:训练营】

1645f9a57016b2c2c40013c03253b960.png

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

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

相关文章

【前端】-【性能优化常识】

目录 前端性能优化指标首屏速度、白屏时间性能优化收效很大的操作:减少首屏资源体积收效不大或者特殊情况的优化操作 操作速度、渲染速度造成操作卡顿和渲染慢的场景性能优化 数据缓存 补充知识异步加载加载方式一:prefetch加载加载方式二:sc…

小迪安全48WEB 攻防-通用漏洞Py 反序列化链构造自动审计 bandit魔术方法

#知识点: 1、Python-反序列化函数使用 2、Python-反序列化魔术方法 3、Python-反序列化 POP 链构造(payload构造) 4、Python-自动化审计 bandit 使用 #前置知识: 函数使用: pickle.dump(obj, file) : 将对…

基于SIR模型的疫情发展趋势预测算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SIR模型的疫情发展趋势预测算法.对病例增长进行SIR模型拟合分析,并采用模型参数拟合结果对疫情防控力度进行比较。整体思路为采用SIR微分方程模型…

免杀对抗-C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值

参考文章: https://github.com/INotGreen/Bypass-AMSI https://mp.weixin.qq.com/s/oJ8eHdX8HGuk6dZv0kmFxg https://kyxiaxiang.github.io/2022/12/14/AMSIandEtw https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell 文章参考: https://www.…

exec族

execl();------------------------------------------ 查看系统命令的路径: 只有错误时返回 -1 执行到execl 时,把execl 里的可执行程序的各个段(数据、堆栈...)替换掉本程序的a.out 实现镜像&a…

【数据分享】1929-2023年全球站点的逐年平均露点(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 有关气象指标的监测站点数据,之前我们分享过1929-2023年全球气象站…

vue3全局引入element-plus使用Message教程

文章目录 安装引入 Element Plus和组件样式示例注意安装与引入:按需引入:API 使用:样式问题:组件上下文:版本兼容性:错误处理: 这是 Element UI 的 Vue 3 版本。ElMessage 是 Element Plus 中的…

四年创作,心路历程

四年创作,心路历程 前言初识收获日常憧憬 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神的孩子都在歌唱 前言 今天打开csdn,发现官方发送了一条私信,原来我已经在计算机这…

解决华为云服务器宝塔面板无法访问显示“此站点的连接不安全”问题

已经配置好安全组以及初始化宝塔面板,还是无法访问镜像管理页面,提示此站点的连接不安全。 解决方案 将地址https改为http即可进入。 成功登录后,开启面板SSL即可。

LabVIEW智能家居安防系统

LabVIEW智能家居安防系统 随着科技的飞速发展和人们生活水平的不断提升,智能家居系统以其便利性和高效性,逐渐成为现代生活的新趋势。智能家居安防系统作为智能家居系统的重要组成部分,不仅能够提高家庭的安全性,还能为用户提供更…

数学算法(算法竞赛、蓝桥杯)--最大公约数,欧几里得算法

1、B站视频链接&#xff1a;G05 最大公约数 欧几里得算法_哔哩哔哩_bilibili 题目链接&#xff1a;[NOIP2001 普及组] 最大公约数和最小公倍数问题 - 洛谷 #include <bits/stdc.h> using namespace std; typedef long long LL; LL x,y,ans;LL gcd(LL a,LL b){return b0?…

【P1328】[NOIP2014 提高组] 生活大爆炸版石头剪刀布

[NOIP2014 提高组] 生活大爆炸版石头剪刀布 题目背景 NOIP2014 提高组 D1T1 题目描述 石头剪刀布是常见的猜拳游戏&#xff1a;石头胜剪刀&#xff0c;剪刀胜布&#xff0c;布胜石头。如果两个人出拳一样&#xff0c;则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种…

linux用户管理命令2

useradd可以创建用户&#xff0c;其执行具体表现为在home文件夹下创建对应文件 那么有了useradd添加用户&#xff0c;自然有passwd添加用户密码 userdel可以删除用户&#xff0c;其中-r命令删除用户及其文件&#xff0c;-f命令可以强制删除用户&#xff0c;即使用户当前正在登录…

RN封装的底部向上弹出的弹出层组件

组件代码 import React from react; import { View, StyleSheet, Modal, TouchableOpacity, Text, TouchableWithoutFeedback } from react-native;const BottomPopup ({ visible, onClose, children, leftButtonTitle, rightButtonTitle, onLeftButtonPress, onRightButtonP…

Elasticsearch:语义搜索即服务处于卓越搜索的中心

作者&#xff1a;来自 Elastic Sherry Ger, Stephen Brown 对于许多企业来说&#xff0c;搜索卓越中心&#xff08;center of excellence - COE&#xff09;向其用户提供搜索服务&#xff0c;从不同的数据源中整理知识&#xff0c;并将搜索功能集成到其内部和外部应用程序中。…

“数据持久化”和“缓存与数据库不一致”到底有什么区别?

之前&#xff0c;我一直把“数据持久化”和“缓存与数据库不一致问题”给搞混了。我当时复习的时候基本上就没有思考&#xff0c;就是纯背诵&#xff0c;数据持久化是什么&#xff0c;数据持久化有两种方式&#xff0c;这两种方式特点是什么&#xff0c;然后巴拉巴拉一堆。缓存…

「09」媒体源:播放本地或在线的音视频GIF文件

「09」媒体源播放本地或在线的音视频GIF文件 通过媒体源功能&#xff0c;您可以添加自己想要展示的各种视频内容&#xff0c;例如自己的视频课程、电影或客户见证视频、以及GIF动画等。 &#xff08;图层叠加效果&#xff09; &#xff08;绿幕抠像叠加效果&#xff09; 缺点…

[Android]创建Google Play内购aab白包

开发时需要调试Google内购&#xff0c;需要先往Google商店传一个白包上去。确定包名&#xff0c;然后进行内购产品创建。 1.创建一个空项目&#xff0c;填写正式名称和正式包名。 如果你只是为一个测试开发账号打白包&#xff0c;然后进行内购测试&#xff0c;这时包名随便写…

【idea快捷键】idea开发java过程中常用的快捷键

含义win快捷键mac快捷键复制当前行或选定的代码块Ctrl DCommand D通过类名快速查找类Ctrl NCommand N通过文件名快速查找文件Ctrl Shift NCommand Shift N通过符号名称快速查找符号&#xff08;类、方法等&#xff09;Ctrl Alt Shift NCommand Shift O跳转到声明C…

以太网PHY,MAC及其通信接口介绍

本文主要介绍以太网的 MAC 和 PHY&#xff0c;以及之间的 MII&#xff08;Media Independent Interface &#xff0c;媒体独立接口&#xff09;和 MII 的各种衍生版本——GMII、SGMII、RMII、RGMII等。 一&#xff1a;简介 从硬件的角度看&#xff0c;以太网接口电路主要由MA…