問題タブ [paxos]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
distributed-system - 「自由選択のもう 1 つの利点: 完全に非同期の合意プロトコル」の説明
誰でも、「完全非同期契約プロトコル」のステップ 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 メッセージが 1 つある場合は
(2, r, v, D)
、 を設定しxp := v
ます。 t
(b) D メッセージより多い場合は、決定しv
ます。- (c) Else セット
xp = 1
または0
確率 1/2 のそれぞれ。
- (a) D メッセージが 1 つある場合は
- ステップ 4 : 設定
r := r + 1
してステップ 1 に進みます。
私はこのプロトコルを次のように理解しています。
最初のステップで、各ノードは他のすべてのノードにその状態を通知します。
2 番目のステップで、各ノードは、値を決定するのに十分な情報を「見た」かどうかを判断します。つまり、過半数を待ちます。多数派が同じ値を持っている場合、「多数派が考えているのを見た」のように、この情報をブロードキャストし始めますv
。それ以外の場合は、決心しなかったというメッセージを送信します。
最後に、3 番目のステップで、複数のt
「決定的な」メッセージがあるかどうかを確認します (t
ノードのメッセージが配信されない場合に備えて、少なくとも 1 つの「決定的な」メッセージがあります)。しかし、 D メッセージを1 つxp := v
だけ受信した場合にのみ設定する理由がわかりません。2 つの D メッセージを受信すると 3c に分類されます。この場合、v にランダムな値を割り当てます。なぜですか?
3 番目のステップを次のように説明できないのはなぜですか。
- (a) D メッセージがゼロの場合、1/2 の確率で設定
xp = 1
または0
それぞれ。 t
(b) D メッセージより多い場合は、決定しv
ます。- (c) Else セット
xp := v
.