分布式系统原理七:2PC 3PC

  • 两阶段提交协议(Two-phase Commit,2PC),经常用来实现分布式事务,系统中一般包括两类节点:一类为协调者(coordinator),通常只有一个;另一类为事务参与者(worker),一般包含几个。
  • 过程如下:

    • 阶段1:请求阶段(Prepare Phase)
      协调者通知事务参与者准备提交或者取消事务,然后进入表决过程。在表决过程中,参与者将告诉协调者自己的决策:同意或者取消。
    • 阶段2:提交阶段(Commit Phase)
      在提交阶段,协调者将基于第一个阶段的投票结果进行决策;提交或者取消。当且仅当所有的参与者同意提交事务,协调者才通知所有的参与者提交事务,或者协调者通知所有的参与取消事务。参与者在接收到协调者发来的消息后将执行相应的操作。

2PC可能面临的两种故障:

  • 1:事务参与者故障

    • 解决方法:给每个事务设置一个超时时间,如果某个事务参与者一直不响应,到达超时时间后整个事务失败。
  • 2:协调者发送故障

    • 协调者需要将事务相关的信息记录到操作日志并同步到备用协调者,假如协调者发生故障,备用协调者可以接替它完成后续的工作。如果没有备用协调者,协调者发送永久性故障,事务参与者无法完成事务而一直等待下去。
  • 两阶段提交协议是阻塞协议,执行过程中需要锁住其他更新,且不能容错,大多数分布式存储系统都采用敬而远之的做法,放弃对分布式事务的支持。

3PC

  • 与两阶段提交不同的是,三阶段提交有两个改动点。

    • 1、引入超时机制。同时在协调者和参与者中都引入超时机制。
    • 2、在第一阶段和第二阶段中插入一个准备阶段。保证了在最后提交阶段之前各参与节点的状态是一致的。
  • 执行过程

    • 阶段一:请求阶段。

      • 事务请求阶段,协调者询问参与者并获取反馈。
    • 阶段二:准备阶段。

      • 若参与者无法正常反馈,则结束事务。否则,发送执行事务操作指令,参与者执行具体事务并记录Undo和Redo信息,并反馈结果。
    • 阶段三:提交阶段。

      • 协调者正常工作且通信正常时,发送事务提交请求或者取消请求。否则,参与者会在等待超时之后自行提案事务。
  • 两阶段提交与三阶段提交的区别:

    • 没有任何事情是完美的。特别是在分布式的情况下。事实上,分布式在某个程度上其实是人类社会发展的一个极佳写真。因为人类社会中个体的可靠性显然比分布式系统节点的可靠性要低很多。
  • 三阶段提交也不完美。但是它比两阶段好。

    • 两阶段的问题可以这样分解:

      • 1,协调者出错,参与者也出错;
      • 2,协调者出错,参与者不出错;
      • 3,协调者不出错,参与者出错;
      • 4,协调者不出错,参与者也不出错。
    • 显然第4种不是问题。所以实际上只有3个问题。而问题2可以通过简单地NEW一个新的协调者来解决。问题3的错则显然正是两阶段提交协议的解决目标,所以也没有问题。
    • 有问题的只有协调者出错,参与者也出错的问题1。这种情况可以被进一步分为参与者有没有收到提交的消息。如果参与者没有收到提交的消息,那么显然将不会(或没有—从系统恢复的角度)发生任何真正的提交行为;而如果有任何参与者收到了提交的消息,那么就很可能发生或已经发生了真正的提交行为。这个“可能”,为系统引入了不确定因素。系统没有办法解决这样的问题,唯一的办法便是引入超时机制。否则除了事务没有办法终结以外,部分参与者节点还有可能永不释放其所持有的全部数据锁。
    • 超时机制的引入意味着将两阶段的第二阶段再度分开成两个阶段:不确定阶段与确定阶段。超时以前是不确定操作阶段,超时以后是确定操作阶段。因为在超时发生以前,系统处于不确定阶段,但是超时发生以后,系统则转入确定阶段。超时事件本身,则是系统进行状态转换的信号。但是因为真正引起超时的错只会在协调者与参与者同时出错(对于不出错但超时的情况,视为出错。即超时本身就是一种错—如果超时不“是”错,那么超时机制在这里就不可能工作—这其实就是超时机制的逻辑根本所在。超时是一种错,所以超时可以被用来表示错。如果用一种不是错的信号来表示错,那要区分真正的错就会很困难了)的情况下才会发生,在其它所有的情况下并不会发生,所以必须对这些情况进行相同的状态划分:准备好与提交状态。这些名词并不是很合乎它要表示的语义,但两个状态足够表达所有的情况才是最重要的事情。
稿源:成长之路 (源链) | 关于 | 阅读提示

本站遵循[CC BY-NC-SA 4.0]。如您有版权、意见投诉等问题,请通过eMail联系我们处理。
酷辣虫 » 后端存储 » 分布式系统原理七:2PC 3PC

喜欢 (0)or分享给?

专业 x 专注 x 聚合 x 分享 CC BY-NC-SA 4.0

使用声明 | 英豪名录

登录

忘记密码 ?

切换登录

注册