解释"自由选择的另一个优势:完全异步协议协议"

时间:2017-11-09 19:57:37

标签: distributed-system consensus paxos raft

请允许任何人澄清" Completely Asynchronous Agreement Protocol"中的第3步(见下文):

过程P:初始值xp。

  • 第0步:设置r := 1
  • 第1步:将消息(1, r, xp)发送给所有流程。
  • 第2步:等待收到N - t类型的(1, r, x)条消息。如果超过N/2条消息的值v相同,则将消息(2, r, v, D)发送给所有进程。否则将消息(2, r, ?)发送给所有进程。
  • 第3步:等到类型N - t的{​​{1}}条消息到达。
    • (a)如果有一条D-message (2, r),则设置(2, r, v, D)
    • (b)如果有超过xp := v条D消息,请确定t
    • (c)否则,每次设置vxp = 1概率为1/2。
  • 第4步:设置0并转到第1步。

我理解这个协议如下。

在第一步,每个节点通知每个其他节点其状态。

在第二步,每个节点决定是否有"看到"足够的信息来确定价值,换句话说,它等待多数。如果多数具有相同的值,它就会开始广播这些信息,例如"我看到多数人认为r := r + 1"。否则它会发出一条消息,表示它没有下定决心。

最后,在第三步中,我们检查是否有超过v"决定性的"消息(如果不传递t个节点的消息,将至少有一个"决定性的消息)。但我不明白为什么只有在收到一个 D-message时才设置t。接收两个D消息落入3c,在这种情况下,我们将为v分配随机值。为什么?

为什么我们不能描述第三步:

  • (a)如果D消息为零,则每次设置xp := vxp = 1的概率为1/2。
  • (b)如果有超过0条D消息,请确定t
  • (c)Else set v

1 个答案:

答案 0 :(得分:0)

您链接的论文介绍了Ben-Or共识算法。它提供了两种版本,一种用于简单的概率共识,另一种用于拜占庭协议。您提供的伪代码复制了前者。

请注意,步骤 3(a)的含义可能会引起误解:

pspcoord<-spTransform(plotcoord, CRS('+proj=utm +zone=21'))

这并不意味着“恰好一个”,而是“至少一个”。可以从1998 algorithm's correctness proof推断出这一点,其中第三步略作改写:

If there is one D-message (2, r, v, D) then set xp := v