Distributed system “解释”;自由选择的另一个优势:完全异步协议协议;

Distributed system “解释”;自由选择的另一个优势:完全异步协议协议;,distributed-system,consensus,paxos,raft,Distributed System,Consensus,Paxos,Raft,请任何人在“”中澄清第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类型为(2,r)的消息到达。 (a) 如果有一条D消息(2,r,v,D),则设置xp:=v (b) 如果超过tD-消息,则决定v (c) 否则设置xp=1或0的概率为1/2 步骤4:

请任何人在“”中澄清第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
    类型为
    (2,r)
    的消息到达。
    • (a) 如果有一条D消息
      (2,r,v,D)
      ,则设置
      xp:=v
    • (b) 如果超过
      t
      D-消息,则决定
      v
    • (c) 否则设置
      xp=1
      0
      的概率为1/2
  • 步骤4:设置
    r:=r+1
    并转至步骤1
我对本协议的理解如下

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

在第二步,每个节点决定它是否“看到”了足够的信息来确定值,换句话说,它等待多数。如果多数人具有相同的值,它开始广播这些信息,比如“我看到多数人认为
v
”。否则,它会发出一个信息:它并没有下定决心

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

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

  • (a) 如果没有D消息,则以1/2的概率设置
    xp=1
    0
  • (b) 如果超过
    t
    D-消息,则决定
    v
  • (c) 否则设置
    xp:=v

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

请注意,步骤3(a)的含义可能有点误导:

If there is one D-message (2, r, v, D) then set xp := v
它的意思不是“正好一个”,而是“至少一个”。这可以从第三步稍作修改的示例中推断出来:

wait for messages of the form (P, k, ∗) from n − f processes {“∗” can be 0, 1 or ?}
if received at least f + 1 (P, k, v) with the same v != ? then decide(v)
if at least one (P, k, v) with v != ? then x ← v else x ← 0 or 1 randomly {query r.n.g.}