一. 前言
本文记录2pc算法的一些论文、博客的精华内容。
二. 共识算法
根据CAP理论,当网络发生分隔的时候,如果保持高可用性,则会损失一致性;反之亦然。为了实现一致性或者最终一致性,必须要实现分隔后可能不同的数据同步,我们称之为共识算法。共识算法主要应用场景包括:
- 决定是否提交操作存入数据库
- 同步时钟
- 是否同意进入分布式算法下一阶段(常用于复制状态机中)
- 选举领导者节点用于更高层的协议处理
对于一个共识算法,最重要的是以下三个特性:
- 达成承诺(Agreement):所有的节点会保持一个相同的值
- 有效性(Validity):决定采取的值必须是由某个节点提出的
- 终结性(Termination):所有节点均会做出决定
二. 2PC(Two-Phase Commit)
2PC(Two-Phase Commit), 即二阶段提交,是一种最简单的共识算法,也非常易于理解。主要包括以下两阶段:
- 组织者向所有参与者建立连接,并给出一个建议的值并收集他们的回复
- 如果所有人同意,则再次和所有参与者沟通并让他们知道。否则告诉所有参与者取消该共识。
下图所示为二阶段的1,2阶段示意图
考虑到组织者也可能会是出问题的那个节点,因此很多时候我们需要采用哨兵模式,增加一个观察节点,当组织者出问题时代替进行共识算法的通信。
四. 参考文献
【1】https://www.the-paper-trail.org/post/2008-11-27-consensus-protocols-two-phase-commit/