ここに paxos アルゴリズムの疑似コードを貼り付けました。
Paxosコンセンサスアルゴリズムの「ビュー」とは何ですか?
誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.
アルゴリズムは、各ノードには、ノードが追跡する必要がある一連の情報を含む「状態」があることを示しています。
ノード #1 とノード #2 の 2 つのノードがあるとします。最も単純なケースでは、ノード #2 がノード #1 に参加し、両方とも paxos をプレイします。2 が 1 に参加した後、ノード #1 とノード #2 の状態は正確にどうなりますか? 「views」データ構造はいつ変更され、何が含まれますか? 誰かが paxos をプレイする 2 つのノードのこの単純なケースを説明できれば、複数ノードのケースを理解できると思います。
私の現在の理解(正しくないと確信しています)は次のとおりです。
- ノード #2 はメッセージを送信してノード #1 に参加します。
- ノード #1 はノード #2 から参加を求めるメッセージを受信します。
- ノード #1 が主導権を握り、フェーズ 1 に入り、my_num = max(0,0) + 1 = 1 を計算します。
- ノード #1 は、views[0] (空) のすべてのノードを送信します。 prepare(1,1)
- ノード #1 が最初の連絡先ノード (ノード #2) を送信します prepare(1,1)
- ノード #1 がノード #1 (自身) を送信する prepare(1,1)
- ノード #2 は prepare(1,1) を受け取ります。num_h=1 を設定し、リーダー PROMISE(0,{empty list}) に戻ります。
- ノード #1 は prepare(1,1) を受け取り、その num_h=1 を設定し、自身を PROMISE(0,{empty list}) に戻します。
フェーズ 2 に進みます
これは私がかなり混乱しているところです。
ノード #1 はリーダーであり、2 つの PROMISE(0,{empty list}) メッセージを受け取ります。アルゴリズムによると、リーダーがビュー [0] でプロミスの過半数を取得した場合、「v」の値を設定し、ACCEPT メッセージをすべてのレスポンダーに送信できます。
私が混乱しているのは、現在リーダーのビュー[0]が空であるため、空のリストの大部分をどのように計算できるでしょうか?
また、リーダーが Promise の過半数を受け取り、セット v = ping 可能なノードのセット (自己を含む) に進むと仮定しましょう。ping可能なノードとは正確には何ですか? ノード #1 とノード #2 だけですか?
すべての/あらゆる助けに感謝し、助けてくれた人に間違いなくポイントを与えます.