【转载】一分钟了解两阶段提交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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MeasureSpec介绍及使用详解

    MeasureSpec介绍及使用详解一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。一个MeasureSpec由大小和模式组成。它有三种模式:UNSPECIFIED(未

    2022年7月1日
    22
  • 手机录屏gif制作软件_录屏 gif

    手机录屏gif制作软件_录屏 gif1、ScreenToGif下载:https://www.screentogif.com/2、使用教程https://my.oschina.net/u/4264749/blog/3555825

    2026年2月1日
    3
  • java.lang.NullPointerException出现的几种原因以及解决

    java.lang.NullPointerException出现的几种原因以及解决java.lang.NullPointerException出现的几种原因:1、字符串变量未初始化2、接口类型的对象没有用具体的类初始化,比如:Mapmap//会报错Mapmap=newMap();//则不会报错了3、当一个对象的值为空时,你没有判断为空的情况。4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常Stringstr…

    2022年5月20日
    47
  • 号称有效期至2017年的 ESET Nod32 “付费”许可证,只要能用一年就行了

    号称有效期至2017年的 ESET Nod32 “付费”许可证,只要能用一年就行了这两枚“付费”许可证流于网上已有一段时间。安装ESETNod32各版本(包括最新版ESS/EAV5)并用“二选一”激活后,ESETNod32界面显示:许可证有效期至2017-4-29;许可证类型—付费许可证。通过这段时间监测:病毒库更新正常,没有被封杀迹象。我将“付费”带引号是因为没人付费。至于能否真的坚持到2017年,依我之见大可不必纠结不必较真。安安生生无偿服务一年半载也就蛮不错了—…

    2022年6月18日
    30
  • CICD – docker私有仓库

    CICD – docker私有仓库1、创建私有仓库dockerpullregistrydockerrun-d-v/opt/registory:/var/lib/registory-p5000:5000–restart=always–nameregistryregistry2、查看私有仓库curlhttp://47.99.211.128:5000/v2/_catalog#域名解析后…

    2022年5月10日
    44
  • JMH初探

    JMH初探JMH入门(很多情况下需要做性能基准测试(benchmark)。简单的说就是,在几种类似的解决方案中,寻找效率较高的。比如对比一下thrift,protobuf,avro在对象序列化时的效率等。这种测试通常需要对被测的代码段反复执行,最后取平均值,然后横向对比几种方案。如果能有(时间、CPU、内存、IO)曲线图表输出就更加直观了。一开始考虑用JMeter来做,但是这个框架似乎有点大,看了几次都

    2022年7月11日
    29

发表回复

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

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