如何理解Paxos分布式一致性算法的第2阶段?

时间:2012-05-11 20:44:36

标签: algorithm distributed-computing paxos consensus

我在这里粘贴了paxos算法的伪代码:

What is a "view" in the Paxos consensus algorithm?

并且想知道是否有人能指出我正确的方向。

该算法表明每个节点都有一个“状态”,其中包含节点应该跟踪的一堆信息。

假设我们有两个节点:节点#1和节点#2。在最简单的情况下,节点#2加入节点#1,它们都播放paxos。在2个连接1之后,节点#1和节点#2的状态到底发生了什么? “视图”数据结构何时发生变化,它包含哪些内容?如果有人可以向我解释两个节点播放paxos的简单情况,那么我想我可以找出多个节点的情况。

我目前的理解(我非常肯定不正确)如下:

  1. 节点#2发送消息以加入节点#1。
  2. 节点#1接收来自节点#2的消息,要求加入。
  3. 节点#1承担领导并进入阶段1,计算my_num = max(0,0)+ 1 = 1
  4. 节点#1发送视图[0](空的)prepare(1,1)
  5. 中的所有节点
  6. 节点#1发送初始联系节点(节点#2)prepare(1,1)
  7. 节点#1发送节点#1(自身)prepare(1,1)
  8. 节点#2接收准备(1,1)。它设置其num_h = 1并返回到领导者PROMISE(0,{empty list})
  9. 节点#1接收prepare(1,1)并设置其num_h = 1并返回自身PROMISE(0,{empty list})。
  10. 现在我们进入第2阶段

    这是我很困惑的地方。

    节点#1是领导者,它接收两个PROMISE(0,{空列表})消息。根据该算法,如果领导者在视图[0]中获得大多数承诺,则它可以为“v”设置值并将ACCEPT消息发送给所有响应者。

    我感到困惑的是,目前领导者的观点[0]是空的,那么如何计算空列表的大部分?

    此外,我们假设领导者已收到大部分承诺并继续设置v =可ping的节点集(包括self)。什么是可ping的节点?它只是节点#1和节点#2?

    非常感谢所有/任何帮助,肯定会给那些有帮助的人奖励积分。

1 个答案:

答案 0 :(得分:0)

伪代码不适用于特定问题。事实上,教授说我们不需要使用伪代码,如果我们不想并且说我们可以查看其他Paxos论文(即paxos简单,paxos现场等等),以获得实施该算法的指导。也许你是对的,我应该看维基百科来实现这个算法。所以视图[..]只是一个哈希映射,节点可以选择它想要的任何值。如果我理解正确,你会说多数声明只是检查它是否收到了“足够的”PROMISE消息。但是,了解我们是否足够的唯一方法是节点是否跟踪其组成员是谁。这意味着我需要一个不同的数据结构。

此外,由于您发表了评论,我无法给予您积分。如果您发布答案,我可以给你积分。