一致性协议,2pc,3pc,parxos,zab,raft

一致性协议,raft,2pc,3pc,paxos,zab

CAP

待续:raft和paxos,zab协议

在分布式系统中,当一个事务操作需要跨越多个分布式节点的时候,为了保持事务ACID的特征,就需要引入一个称为“协调者”(Coordinator)的组件来统一调度所有分布式节点的执行逻辑,这些被调度的节点则称为“参与者”(Participant)。协调者负责参与者的行为,并最终决定这些参与者是否要把事务真正提交。在长期的研究探索过程中,涌现了一大批经典的一致性协议和算法,其中最著名的就是二阶段、三阶段协议和paxos算法。

一、2PC

    2PC是Two-Phase-Commit的缩写,即两个阶段提交。

    阶段一:提交事务请求

    阶段二:执行事务提交

        1、执行事务提交

        2、中断事务

    过程示意图如下:

一致性协议,2pc,3pc,parxos,zab,raft

    优缺点:

            优点:原理简单,实现方便

            缺点:同步阻塞、单点问题、数据不一致。

关于这几个缺点,在实际应用中,都是对2PC 做了相应的改造:

  1. 同步阻塞:2PC 有几个过程(比如 Coordinator 等待所有参与者表决的过程中)都是同步阻塞的,在实际的应用中,这可能会导致长阻塞问题,这个问题是通过超时判断机制来解决的,但并不能完全解决同步阻塞问题;
  2. Coordinator 单点问题:实际生产应用中,Coordinator 都会有相应的备选节点;
  3. 数据不一致:这个在前面已经讲述过了,如果在第二阶段,Coordinator 和参与者都出现挂掉的情况下,是有可能导致数据不一致的。

二、3PC

    3PC是Three-Phase Coomit的缩写,即三阶段提交,是2PC的改进版本,其将二阶段提交协议的“提交事务请求”过程一分为二,形成了由CanCommit、PreCcommit和doCommit三个阶段组成事务处理协议。

    阶段一:canCommit事务询问。

    阶段二:PreCommit预提交

            1、执行事务预提交

            2、中断事务

    阶段三:doCommit正式提交

            1、执行提交

            2、中断事务

    过程示意图如下:

 

一致性协议,2pc,3pc,parxos,zab,raft

优缺点:

    优点:降低参与者的阻塞范围,能够在出现单点故障后继续达成一致性。

    缺点:参与者收到preCommit消息后,如果出现网络分区,此时协调者所在的节点和参与者无法进行正常的网络通信,这种情况下,该参与者以然后进行事务提交,这会导致数据的不一致性。


其实3pc是为了解决2pc中的数据一致性问题,3PC 依然带来其他问题:比如,网络分区问题,在 preCommit 消息发送后突然两个机房断开,这时候 Coordinator 所在机房会 abort, 另外剩余参与者的机房则会 commit。

而且由于3PC 的设计过于复杂,在解决2PC 问题的同时也引入了新的问题,所以在实际上应用不是很广泛。

三 .paxos协议

四.zab协议

参考博客:https://www.jianshu.com/p/2bceacd60b8a

五.raft协议