• 简述paxos算法


    Paxos算法解决的是⼀个分布式系统如何就某个值(决议)达成⼀致。⼀个典型的场景是,在⼀个分布式数据库系统中,如果各个节点的初始状态⼀致,每个节点执⾏相同的操作序列,那么他们最后能够得到⼀个⼀致的状态。为了保证每个节点执⾏相同的操作序列,需要在每⼀条指令上执⾏⼀个“⼀致性算法”以保证每个节点看到的指令⼀致。在Paxos算法中,有三种⻆⾊:Proposer (提议者),Acceptor(接受者),Learners(记录员)

    Proposer提议者:只要Proposer发的提案Propose被半数以上的Acceptor接受,Proposer就认为该提案例的value被选定了。

    Acceptor接受者:只要Acceptor接受了某个提案,Acceptor就认为该提案例的value被选定了Learner 记录员:Acceptor告诉Learner哪个value被选定,Learner就认为哪个value被选定。

    Paxos算法分为两个阶段,具体如下: 阶段⼀ (preprae ):
    1. Proposer收到client请求或者发现本地有未提交的值,选择⼀个提案编号 N,然后向半数以上的Acceptor发送编号为 N的Prepare请求。
    2. Acceptor收到⼀个编号为 N的 Prepare请求,如果该轮paxos
    本节点已经有已提交的value记录,对⽐记录的编号和N,⼤于N则拒绝回应,否则返回该记录
    value及编号

     

    没有已提交记录,判断本地是否有编号N 1 ,N 1 >N、则拒绝响应,否则将N 1 改为N(如果没有
    N 1 ,则记录N),并响应prepare

    阶段⼆ (accept):
    1. 如果 Proposer收到半数以上 Acceptor对其发出的编号为 N的 Prepare请求的响应,那么它就会发送⼀个针对[N,V]提案的
      Accept请求给半数以上的 Acceptor。V就是收到的响应中编号最⼤的value
      ,如果响应中不包含任何value,那么V 就由 Proposer ⾃⼰决定。
    2. 如果 Acceptor收到⼀个针对编号为 N的提案的 Accept请求,Acceptor对⽐本地的记录编号,如果⼩于等于N,则接受该值,
      并提交记录value。否则拒绝请求

    Proposer 如果收到的⼤多数Acceptor响应,则选定该value值,并同步给leaner,使未响应的Acceptor达成⼀致

    活锁:accept时被拒绝,加⼤N,重新accept,此时另外⼀个proposer也进⾏相同操作,导致accept⼀致失败,⽆法完成算法multi-paxos:区别于paxos只是确定⼀个值,multi-paxos可以确定多个值,收到accept请求后,则⼀定时间内不再accept其他节点的请求,以此保证后续的编号不需要在经过preprae确认,直接进⾏accept操作。此时该节点成为了leader,直到accept被拒绝,重新发起prepare请求竞争leader资格。
  • 相关阅读:
    SpringBoot SpringBoot 原理篇 1 自动配置 1.9 bean 的加载方式【七】
    【perl】基本语法 /备忘录/
    React简介
    【机器学习】——【线性回归模型】——详细【学习路线】
    Vue中的生命周期
    C语言学习1==gcc 创建动态库
    【视觉基础篇】15 # 如何用极坐标系绘制有趣图案?
    斐波那契模型系列【动态规划】
    【Java】Stream流、方法引用
    Zookeeper 命令使用和数据说明
  • 原文地址:https://blog.csdn.net/m0_70734549/article/details/126742809