一致性协议

来源:互联网 发布:软件销售怎么样 编辑:程序博客网 时间:2024/05/21 10:15
  1. 二阶段提交:2PC
    将一个事务的处理过程分为了投票和执行两个阶段,其核心是对每个事务都采用先尝试后提交的处理方式,可将二阶段提交看作一个强一致性的算法。

    这里写图片描述
    这里写图片描述
    优点:原理简单,实现方便
    缺点:同步阻塞、单点问题、数据不一致、太过保守
    ① 同步阻塞:在二阶段提交的执行过程中,所有参与该事务操作的逻辑都处于阻塞状态,也就是说,各个参与者在等待其他参与者响应的过程中,将无法进行任何其他操作。
    ② 单点问题:协调者一旦出现问题,整个二阶段提交流程将无法运行
    ③ 数据不一致:在阶段二执行事务提交的时候,当协调者向所有的参与者发送Commit请求之后,发生了局部网络异常,导致最终只有部分参与者收到了Commit请求。于是出现数据不一致现象。
    ④ 太过保守:如果在协调者指示参与者进行事务提交询问的过程中,参与者出现故障而导致协调者始终无法获取到所有参与者的响应信息的话,这时协调者只能依靠其自身的超时机制来判断是否需要中断事务。任意一个节点的失败都会导致整个事务的失败。

  2. 三阶段提交:3PC
    将二阶段提交协议的“提交事务请求”过程一分为二,形成由CanCommit,PreCommit,DoCommit三个阶段的事务处理协议。
    ① CanCommit:事务询问、各参与者向协调者反馈事务询问的响应
    ② PreCommit:执行事务预提交(发送预提交请求、事务预提交、各参与者向协调者反馈事务执行的响应)、中断事务(发送中断请求、中断事务)
    ③ DoCommit:执行提交(发送提交请求、事务提交、反馈事务提交结果、完成事务)、中断事务(发送中断请求、事务回滚、反馈事务回滚结果、中断事务)

    一旦进入阶段三,可能存在以下两种故障:
    ① 协调者出现问题
    ② 协调者和参与者之间的网络出现故障

    无论哪种情况,最终都会导致参与者无法及时接收到来自协调者的DoCommit或是abort请求,针对这样的异常情况,参与者都会在等待超时之后,继续进行事务提交。
    优点:较之2PC,降低了参与者的阻塞范围,并且能够在出现单点故障后继续达成一致。
    缺点:在参与者接收到PreCommit消息后,如果网络出现分区,此时协调者所在的节点和参与者无法进行正常的网络通信,在这种情况下,该参与者依然会进行事务的提交,这必然出现数据的不一致性。

  3. Paxos算法
    Paxos是一种基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决分布式一致性问题最有效的算法之一。

原创粉丝点击