• 简述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资格。
  • 相关阅读:
    C++构造函数中调用虚函数为什么不会实现多态
    LeetCode 236. 二叉树的最近公共祖先(C++)
    工程监测仪器无线振弦采集仪高低温试验箱测试原理
    Oracle数据加载工具SQL* loader
    有什么免费python安装包?
    全链路压测:确保系统稳定性的关键一环
    【毕业设计】58-基于51单片机的智能语音密码锁设计(原理工程+PCB工程+仿真工程+源代码+答辩论文+实物图)
    SpringBoot 下载 docx 文档
    Java获取客户端操作系统类型-HTTP请求头User-Agent
    2023沈阳师范大学计算机考研信息汇总
  • 原文地址:https://blog.csdn.net/m0_70734549/article/details/126742809