理解分布式一致性协议:二三阶段提交

Posted wuezs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解分布式一致性协议:二三阶段提交相关的知识,希望对你有一定的参考价值。

由于毕设和Lab项目需要,最近在看《从paxos到zookeeper分布式一致性原理与实践》, 2和3PC算法流程,网上资料很多,就不赘述了。由于书中关于2PC和3PC的缺点的部分描述不容易让人理解,因此本文主要想讨论一下2和3PC存在哪些优缺点?为什么存在这些缺点? 以及该协议适应的场景。

2PC 二阶段提交

2PC其实就是先尝试执行事务再提交的策略,如果有一个参与者出现问题,则回滚尝试期间做的事务操作,从而保证分布式事务的原子性。

2PC的缺点:同步阻塞、单点问题、脑裂、过于保守

  • 同步阻塞:
    2PC的执行过程中,协调者和参与者节点都处于阻塞状态。即节点之间在等待对方的相应消息时,它将什么也做不了。特别是,当一个节点A在已经占有了某项公共资源的情况下,为了等待其他节点的响应而陷入阻塞状态时,当节点B尝试访问节点A占有的资源时,这个节点B也将连带陷入阻塞状态。因此会极大限制分布式系统的性能。

  • 单点问题:
    2PC中只有一个协调者,若算法执行到第二阶段,协调者宕机了,则参与者会一直阻塞下去,虽然可以通过选举新的协调者,或者参与者超时释放资源停止阻塞状态,但不管哪种方法都需要花费时间,而这段期间,参与者会一直陷入阻塞。

  • 数据不一致:
    若算法执行到第二阶段,协调者向所有参与者发送commit请求,由于网络异常,导致部分参与者没有收到该commit,而另一部分参与者正常commit,这就导致了数据不一致的出现。
    还有一种情况,当执行到第二阶段,协调者向所有参与者发送commit请求完毕后,参与者A和协调者遇到宕机,此时系统中其余节点无法知道协调者的决策结果,也无法保证参与者A的执行情况,此时新协调者无论执行哪种决策,都可能导致恢复过来的参与者A状态不一致。

  • 过于保守:
    协调者需要获取到所有参与者的响应信息,由于缺乏容错机制,任意一个参与者的失败都会导致整个事务的失败

2PC优点是原理简单、实现方便,但由于存在严重的性能问题,大部分的分布式高并发服务都在避免直接使用。常见的做法是将2PC和paxos协议结合起来,通过2PC保证多个数据分片上操作的原子性,通过paxos协议实现同一个数据分片的多个副本之间的一致性,另外,可以通过paxos协议选举新的协调者来解决2PC协议中协调者宕机的问题。

3PC 三阶段提交

3PC的核心理念是先询问,若所有人都同意,则锁定资源,在开始尝试执行、提交。

优点:
和2PC相比较而言,3PC降低了参与者的阻塞范围,能在出现单点故障后继续达成一致,参与者如果在不同阶段宕机,我们来看看3PC如何应对:

  • 阶段1: 协调者未收到宕机参与者的vote,直接中止事务;宕机的参与者恢复后,读取logging发现未发出赞成vote,自行中止该次事务。因为先询问,此时并没有锁住资源,避免了2PC第一阶段若已经由节点宕机,其他节点无谓的阻塞。
  • 阶段2: 协调者未收到宕机参与者的precommit ACK,但因为之前已经收到了宕机参与者的赞成反馈(不然也不会进入到阶段2),协调者进行commit;宕机的participant恢复后发现收到precommit或已经发出赞成vote,则自行commit该次事务
  • 阶段3:即便协调者未收到宕机参与者的commit ACK,也结束该次事务;宕机的参与者恢复后发现收到commit或者precommit,也将自行commit该次事务。

因为有了准备提交阶段,3PC的事务处理延时也增加了1个RTT,变为3个RTT,但是它防止参与者宕机后整个系统进入阻塞态,增强了系统的可用性,对一些现实业务场景是非常值得的。

缺点:
如果参与者接受到preCommit消息后,如果网络出现分区,此时协调者和参与者无法进行正常通行,这种情况下,参与者和协调者的数据会发生不一致。

参考链接:
https://zh.wikipedia.org/wiki/%E4%B8%89%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4
https://zh.wikipedia.org/wiki/%E4%BA%8C%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4
https://zhuanlan.zhihu.com/p/21994882
http://www.hollischuang.com/archives/1580

以上是关于理解分布式一致性协议:二三阶段提交的主要内容,如果未能解决你的问题,请参考以下文章

分布式一致性协议

一致性协议

分布式一致性协议介绍(PaxosRaft)

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

知识贴:分布式事务的两阶段提交协议(2PC)

Zookeeper - 简述分布式一致性协议(2pc3pcpaxoszab)