zoukankan      html  css  js  c++  java
  • Paxos算法简单介绍

    一种基于消息传递且具有高度容错特性的一致性算法。解决在存在宕机或者网络异常的集群中对某个数据的值达成一致性,并且保证无论在发生以上任何异常都不会破坏整个系统的一致性,具有容错性。

    Paxos算法实现的是分布式系统多个结点之上数据的一致性,这个算法有如下特性

    1.基于消息传递,允许消息传输的丢失,重复,乱序,但是不允许消息被攥改

    2.在结点数少于半数失效的情况下仍然能正常的工作,结点失效可以在任何时候发生而不影响算法正常执行。

     

    1.paxos算法综述

    paxos算法中,分为三种角色:proposer  acceptor  learner,在该算法中,必须满足的三个条件:

    P1:每个acceptor必须批准它收到的第一个提案

    P2:如果编号为M0,值为V0的提案被批准,那么所有编号大于M0且被选定的提案的值都为V0

    a:如果编号为M0,值为V0的提案被批准,那么多有编号为M0且被acceptor批准的提案的值都为V0

    b:若编号为M0,值为V0的提案被批准,那么之后所有proposer提交的编号大于M0的提案,其值都为V0

    C:对于任意的MnVn,如果提案MnVn被提出,那么肯定存在一个由半数以上的acceptor组成的集合S,满足以下两个条件之一:

    1).S中不存在任何被批准过的编号小于Mn的提案acceptor

    2).选取S中所有acceptor批准的编号小于Mn的提案,其中编号最大的提案的Value值为Vn

     

    2.整个过程

    Proposer生成提案:

    1.prepare请求:Proposer选择一个新的提案编号Mn,然后向超过一半acceptoracceptor集合发送请求,要求该集合中的acceptor做出如下回应:

    1).不能再批准任何编号小于Mn的提案

    2).若果acceptor已经批准过任何提案,那向proposer反馈已批准过得提案中编号最大的提案的值

    2.如果proposer收到了半数以上的acceptor的响应结果,则它可以产生编号为Mn,值为Vn的提案,这里的Vn是指的所有响应中编号最大的提案的值。若半数以上的acceptor未批准过任何的提案,则Vn的值又Proposer任意选择

    在提案确定之后,proposer会向acceptor集合再次发送该提案,称此请求为accept请求。

    Acceptor批准阶段:

    Acceptor会收到来自proposer的两种请求:

    Prepare请求:Acceptor可以在任何时候响应一个prepare请求

    Accept请求: 若acceptor为响应过任何编号大于Mn的请求,那么它就可以接受这个编号为Mn的请求。

  • 相关阅读:
    游戏服务器架构概要
    牛客网_Go语言相关练习_选择题(3)
    Go语言实践_实现一(服务器端)对多(客户端)在线聊天室
    Go语言实践_实现一(客户端)对一(服务器端)聊天室
    牛客网_Go语言相关练习_选择题(2)
    飞鱼48小时游戏创作嘉年华_厦门Pitch Time总结与收获
    牛客网_Go语言相关练习_选择题(1)
    Go语言_iota用法
    游戏服务器概述
    LeetCode_1. Two Sum_Solution
  • 原文地址:https://www.cnblogs.com/Evil-Rebe/p/6057082.html
Copyright © 2011-2022 走看看