1

ここに paxos アルゴリズムの疑似コードを貼り付けました。

Paxosコンセンサスアルゴリズムの「ビュー」とは何ですか?

誰かが私を正しい方向に向けることができるかどうか疑問に思っていました.

アルゴリズムは、各ノードには、ノードが追跡する必要がある一連の情報を含む「状態」があることを示しています。

ノード #1 とノード #2 の 2 つのノードがあるとします。最も単純なケースでは、ノード #2 がノード #1 に参加し、両方とも paxos をプレイします。2 が 1 に参加した後、ノード #1 とノード #2 の状態は正確にどうなりますか? 「views」データ構造はいつ変更され、何が含まれますか? 誰かが paxos をプレイする 2 つのノードのこの単純なケースを説明できれば、複数ノードのケースを理解できると思います。

私の現在の理解(正しくないと確信しています)は次のとおりです。

  1. ノード #2 はメッセージを送信してノード #1 に参加します。
  2. ノード #1 はノード #2 から参加を求めるメッセージを受信します。
  3. ノード #1 が主導権を握り、フェーズ 1 に入り、my_num = max(0,0) + 1 = 1 を計算します。
  4. ノード #1 は、views[0] (空) のすべてのノードを送信します。 prepare(1,1)
  5. ノード #1 が最初の連絡先ノード (ノード #2) を送信します prepare(1,1)
  6. ノード #1 がノード #1 (自身) を送信する prepare(1,1)
  7. ノード #2 は prepare(1,1) を受け取ります。num_h=1 を設定し、リーダー PROMISE(0,{empty list}) に戻ります。
  8. ノード #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 だけですか?

すべての/あらゆる助けに感謝し、助けてくれた人に間違いなくポイントを与えます.

4

1 に答える 1

0

擬似コードは特定の問題に特化したものではありません。実際、教授は、必要がなければ擬似コードを使用する必要はないと述べ、このアルゴリズムの実装に関するガイダンスとして、他のPaxosの論文(つまり、paxosをシンプルにした、paxosをライブにしたなど)を見ることができると述べました。 。たぶんあなたは正しいでしょう、私はおそらくこのアルゴリズムを実装するためにウィキペディアを見る必要があります。したがって、views [..]は単なるハッシュマップであり、ノードは任意の値を選択できます。私があなたを正しく理解しているなら、あなたは大多数の声明が「十分な」PROMISEメッセージを受け取ったかどうかをチェックするだけだと言います。しかし、十分な数があるかどうかを知る唯一の方法は、ノードがそのグループメンバーが誰であるかを追跡しているかどうかです。つまり、これには別のデータ構造が必要です。

また、コメントをいただいたため、ポイントを付与することはできません。あなたが答えを投稿するなら、私はあなたにポイントを与えることができます。

于 2012-05-12T14:07:48.283 に答える