• 【转载】一分钟了解两阶段提交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沈剑 架构师之路

  • 相关阅读:
    bootstrap之CDN
    bootstrap之HTML模板
    Glyphicon 字体图标
    crawler4j 学习(二)
    【软件构造】第二章 软件构建的过程和工具(2)
    【软件构造】第二章 软件构建的过程和工具(1)
    【软件构造】第一章 软件构造基础(2)
    【软件构造】第一章 软件构造基础(1)
    机器学习技法笔记-Lecture 1 Linear support vector machine
    机器学习基石笔记-Lecture 15 Validation
  • 原文地址:https://www.cnblogs.com/bad-man/p/7843251.html
Copyright © 2020-2023  润新知