码迷,mamicode.com
首页 > 其他好文 > 详细

PAXOS理解

时间:2015-06-17 00:26:57      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

PAXOS学习记录

前提: 信息准确无篡改,通信环境可信

目的: 解决多结点间一致性问题(集群中一个修改或者申请成为主结点的提议)

主要角色

      Proposer :提出议案(同时存在一个或者多个,他们各自发出提案)

      Acceptor: 收到议案后选择是否接受

      Learner: 酱油

提案: Value{编号,决议}

过程描述

    A 准备 Proposer首先选择一个提议序号n给其他的Acceptor结点发出prepare消息。Acceptor收到prepare消息后,如果提议的序号大于他已经回复的所有prepare消息,则Acceptor将自己上次接受的提议回复给Proposer,并且承诺不再回复小于n的提议

    B 批准 Proposers收到Acceptor中的多数派对prepare的回复后,进入准备阶段。如果在之前的prepare阶段Acceptor回复了上次接受的提议,那么Proposers选择其中序号最大的提议发送给Acceptor批准,否则,Proposers生成一个新的提议值发送给Acceptor批准,Acceptor在不违背之前在Prepare的承诺的前提下,接受这个请求。

    C 确认 如果超过一半的Acceptor接受,提议值生效。Proposers发送acknowledge消息通知所有的Acceptor提议生效

 

每个议员包含

    LastTried[p]:由p试图发起的最后一个议案的编号,没有为负无穷

    PreviousVote[p]:由P投票的所有表决中,编号最大的表决对应的投票,没有为负无穷

    NextBallot[p]:由p发出的所有LastVote(b,v)消息中,表决编号b的最大值

 

流程

    A. 议员p选择一个比LastTried[p]大的表决编号b,设置LastTried[p]=b,然后将NextBallot[p]消息发送给某些议员

    B. q从P收到一个b大于NextBallot[q]的nextBallot(b)消息后,q将NextBallot[q]=b,然后发送LastVote(b,v)给p,其中v=PreviousVote[q](b<=NextBallot[q]的NextBallot[b]消息被忽略)

    C. 在某个多数集合Q中的每个成员都收到一个LastVote(b,v)消息后,p发起一个编号为b,法定人数为Q,议案为d的新表决。给Q中每一个牧师发送一个BeginBallot(b,d)消息

    D. 在收到b=NextBallot[q]的BeginBallot(b,d)消息后,q在编号为b的表决中投出他的一票,设置PreviousVote[p]为这一票,然后向p发送Voted(b,q)消息

    E. p收到Q中每个q的Voted(b,q)消息中,将d(这轮表决的法令)记下,然后发送一条Success(d)消息给每个q

    F. 一个议员在接受到Success(d)后,将决议d记录

原则:少数服从多数原则 如果同时有人提出议案,出现碰撞,双方都需要增加议案的编号再提交,活锁正确,可终止

PAXOS理解

标签:

原文地址:http://www.cnblogs.com/it-worker365/p/4582142.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!