【转载】一分钟了解两阶段提交2PC(运营MM也懂了)

【转载】一分钟了解两阶段提交2PC(运营MM也懂了)

上一期分享了“一分钟了解mongoDB”【回复“mongo”阅读】,本期将分享分布式事务的一种实现方式2PC。

一、概念

二阶段提交2PC(Two phase Commit)是指,在分布式系统里,为了保证所有节点在进行事务提交时保持一致性的一种算法。

二、背景
在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。
当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者(Coordinator)来统一掌控所有参与者(Participant)的操作结果,并指示它们是否要把操作结果进行真正的提交(commit)或者回滚(rollback)。

三、思路
2PC顾名思义分为两个阶段,其实施思路可概括为:
(1)投票阶段(voting phase):参与者将操作结果通知协调者;
(2)提交阶段(commit phase):收到参与者的通知后,协调者再向参与者发出通知,根据反馈情况决定各参与者是否要提交还是回滚;

四、缺陷
算法执行过程中,所有节点都处于阻塞状态,所有节点所持有的资源(例如数据库数据,本地文件等)都处于封锁状态。
典型场景为:
(1)某一个参与者发出通知之前,所有参与者以及协调者都处于阻塞状态;
(2)在协调者发出通知之前,所有参与者都处于阻塞状态;
另外,如有协调者或者某个参与者出现了崩溃,为了避免整个算法处于一个完全阻塞状态,往往需要借助超时机制来将算法继续向前推进,故此时算法的效率比较低。
总的来说,2PC是一种比较保守的算法

五、举例
甲乙丙丁四人要组织一个会议,需要确定会议时间,不妨设甲是协调者,乙丙丁是参与者。
投票阶段:
(1)甲发邮件给乙丙丁,周二十点开会是否有时间;
(2)甲回复有时间;
(3)乙回复有时间;
(4)丙迟迟不回复,此时对于这个活动,甲乙丙均处于阻塞状态,算法无法继续进行;
(5)丙回复有时间(或者没有时间);
提交阶段:
(1)协调者甲将收集到的结果反馈给乙丙丁(什么时候反馈,以及反馈结果如何,在此例中取决与丙的时间与决定);
(2)乙收到;
(3)丙收到;
(4)丁收到;

六、结论
2PC效率很低,分布式事务很难做。

===【完】===

 

【转自】58沈剑 架构师之路

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119370.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 二维数组指针详解

    二维数组指针详解二维数组指针 nbsp 概括的说 指针其实就是可变数组的首地址 说是可变数组 是 nbsp 指其包含内容的数量的可变的 并且是可动态申请和释放的 从而充 nbsp 分节约宝贵的内存资源 我一向喜欢一维数组 除非万不得已 我一 nbsp 般是不用二维数组的 多维的则更是很少涉足了 因为一维简单 容 nbsp 易理解 而用指针指向的多维数组就具有相当的复杂性了 也因此更 nbsp 具有讨论的必要 nbsp nbsp nbsp nbsp 闲话少说 这里我就以三

    2025年11月30日
    5
  • 2021.7idea激活码_在线激活

    (2021.7idea激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    71
  • weka怎么安装_we是什么安装方式

    weka怎么安装_we是什么安装方式1什么是看板管理首先我们先两张现实中的看板系统,能够有助于我们理解看板管理系统。大家常见的应该是实体看板,适合布置在团队所有成员都在一个办公室工作的环境。它的优点很明显,方便工作成员展示和查看自

    2022年8月4日
    10
  • Hadoop简介_hadoop百度百科

    Hadoop简介_hadoop百度百科Hadoop的架构在其核心,Hadoop主要有两个层次,即:加工/计算层(MapReduce)存储层(Hadoop分布式文件系统)除了上面提到的两个核心组件,Hadoop的框架还包括以下两个模块:Hadoop通用:这是Java库和其他Hadoop组件所需的实用工具HadoopYARN:这是作业调度和集群资源管理的框架HadoopStreaming是一个实用程…

    2022年10月17日
    2
  • 利用CANdb++ Editor在DBC文件中进行报文解析(详细教程)

    利用CANdb++ Editor在DBC文件中进行报文解析(详细教程)

    2020年11月8日
    2.4K
  • pycharm自动补全提示选项前面的小标代表含义

    pycharm自动补全提示选项前面的小标代表含义c classf functionm methodv variablep parameter

    2025年8月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号