2012-05-11 22 views
1

我已经贴伪代码这里的Paxos算法:如何理解Paxos分布式一致性算法中的阶段2?

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](它是空的)制备(1, 1)
  5. 节点#1发送初始接触点(节点#2)制备(1,1)
  6. 节点#1发送节点#1(自身)制备(1,1)
  7. 节点#2接收准备(1,1)。它设置它的num_h = 1并返回给leader PROMISE(0,{empty list})
  8. 节点#1接收prepare(1,1)并设置它的num_h = 1并返回自身PROMISE(0,{empty list}) 。

现在我们得到逐步2

这是我很困惑。

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

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

另外,让我们假设领导者已经收到了大部分承诺并且设置了v =可设置节点(包括self)。 pingable节点究竟是什么?它只是节点#1和节点#2?

希望所有/任何帮助,肯定会奖励那些帮助。

+0

也许伪代码列表不是很好。我查看了Wikipedia上的Paxos页面,它看起来比伪代码更清晰......无论如何,伪代码中的视图从来都不是一个集合。视图是从视图编号到该视图中所选值的映射。我认为大多数声明仅仅意味着节点在本地执行的当前阶段收到足够的PROMISE。看起来伪代码实际上试图以某种方式决定一组节点。但Paxos可以用来决定任何值,而不仅仅是节点集合。伪代码是专门针对特定问题的吗? –

+0

我在下面评论。 – user1068636

+0

您是否阅读过[原文?](http://research.microsoft.com/en-us/um/people/lamport/pubs/lamport-paxos.pdf)它非常容易遵循且非常有趣;不像任何其他计算机科学研究你会读过。随后的论文提出了简化和/或扩展Paxos的一些改动,但阅读原始论文会让你牢牢掌握它背后的原则。 – erickson

回答

0

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

另外,由于您发表了评论,所以我无法给您奖励积分。如果你发布答案,那么我可以给你点数。