专栏首页架构师之路一分钟了解两阶段提交2PC(运营MM也懂了)

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

上一期分享了“一分钟了解mongoDB”,本期将分享分布式事务的一种实现方式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效率很低,分布式事务很难做。

本文分享自微信公众号 - 架构师之路(road5858),作者:58沈剑

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-11-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一分钟了解两阶段提交协议/算法(分布式理论基础)

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

    架构师之路
  • 怎么判断自己在不在一家好公司?

    离开一家公司,是对自己人生轨迹的调整。为什么离开一家公司,更多人是基于对公司的不满:执行力低、不够团结、勾心斗角......

    架构师之路
  • 1分钟了解基于内容的推荐,pm又懂了

    前天的《1分钟了解“协同过滤”》,很多同学点了赞,今天接着用通俗的语言说说“基于内容的推荐”,也保证pm弄懂。 什么是基于内容的推荐(Content-based...

    架构师之路
  • 一分钟了解两阶段提交协议/算法(分布式理论基础)

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

    架构师之路
  • 如何在 Java 和 Kotlin 之间进行互操作 | AndroidDevSummit 中文字幕视频

    Kotlin 超好用,您也许想用 Kotlin 写所有的东西,但那些现有的 Java 语言代码该怎么办呢?或者您需要用到一个利用 Java 语言编写并已经在很...

    Android 开发者
  • Dev - C++简单使用指南

    第2步:选择“Console Application”、“C工程”,名称命名为“hello”,然后点击“确定”。

    AIHGF
  • VBA实战技巧08: 鼠标悬停在超链接公式上时运行自定义函数

    本文介绍的技巧来自于myspreadsheetlab.com,这个技巧很有趣,当鼠标悬停在超链接公式上时会运行使用VBA自定义的函数,如下图1所示。

    fanjy
  • Scikit-learn新版本发布,一行代码秒升级

    对于创建可视化任务,scikit-learn 推出了一个全新 plotting API。

    代码医生工作室
  • Scikit-learn新版本发布,一行代码秒升级

    对于创建可视化任务,scikit-learn 推出了一个全新 plotting API。

    量子位
  • 从头搭建一个flask鉴权系统之完结篇

    我这里使用twilio提供的短信功能,它提供了一个免费的短信接口,让我们可以在完全free的状态下测试短信功能,同时也有对应的python库twilio来简化开...

    周萝卜

扫码关注云+社区

领取腾讯云代金券