分布式笔记(二)一致性协议

一致性协议

一、2PC与3PC

请自行回忆2PC与3PC的过程,及在正式提交阶段的处理单点问题的区别。分析各自的优缺点。

二、Paxos算法

一)Paxos算法解决的问题:分布式系统中如何对一个问题达成共识。

二)从提案到表决流程涉及到的角色:

1.提案者(Propser):负责提出议案,可能有多个。

2.接受者(Accpter):对指定的提案进行表决,一定有多个。

3.学习者(Learner):收集接受者对提案的表决,根据少数服从多数原则,形成最终提案表决。

三)Paxos算法描述

  • 第一阶段(Prepare阶段)

Proposer:

    • 选取提案编号n,并向大多数Acceptor发送携带编号n的prepare请求。

Acceptor:

    • 如果收到的提案编号n比自己已经收到的编号都要大,则向Proposer承诺不再接收编号小于n的提案,如果之前接受过提案,则同时将接受的提案中编号最大的提案及其编号发给Proposer。
    • 如果收到的提案编号n小于自己已经收到提案编号的最大值,则拒绝。
  • 第二阶段(Accept阶段)

Proposer:

    • 首先,对接收到响应,逐条处理:
      • 如果接收到拒绝,则暂不处理。
      • 如果接收到同意,同时还接收到Acceptor已经接受的提案,则记下该提案及编号。
    • 处理完响应后,统计拒绝和同意个数:
      • 如果大多数拒绝,则准备下次提案。
      • 如果大多数同意,从这些Acceptor已经接受的提案中选取提案编号最大的提案作为自己的提案,没有则使用自己的提案,逐个向Acceptor发送Accept消息。

Acceptor:

    • 如果收到的提案编号n小于自己已经收到最大提案编号,则拒绝。
    • 如果收到的提案编号n等于自己已经收到最大提案编号,则接受该提案。
    • 如果收到的提案编号n大于自己已经收到最大提案编号,则拒绝。
  • 形成共识(与Prepare&Accept阶段并行)

Acceptor:

    • 每当接受一个提案,则将该提案及编号发给Learner。

Learner:

    • 记录每一个Acceptor当前接受的提案,一个Acceptor先后发来多个提案,则保留编号最大的提案。
    • 统计每个提案被接受的Acceptor个数,如果超过半数,则形成共识。

更多:https://www.zhihu.com/question/19787937

Simple is important!
原文地址:https://www.cnblogs.com/Shadowplay/p/7729856.html