web-dev-qa-db-ja.com

リングトポロジのゴシッププロトコル

ゴシップベースのメンバーシップ検出メカニズムを実装しています。リングトポロジがあるとします。つまり、node1はその周囲の2つのノード(node4とnode2)についてのみ認識します。

                node1
             -        -
          -              -
      node4              node2
          -              -
            -         -
               node3

さて、うわさ話は言います:メンバーシップリストからランダムにノードを選んでください。ただし、リングトポロジに厳密に従う場合、node1はnode2またはnode4でのみゴシップを試行する必要があります。それ以外の場合は、通信の場合のみ、トポロジはリングではなくクリークになります。

背景:Amazon dyanmoの論文によると:

各ノードは毎秒ランダムに選択されたピアに接続し、2つのノードは永続的なメンバーシップ変更履歴を効率的に調整します。

その場合、dynamoの実装は「真の」リングトポロジに従わず、コンシステントハッシュ(レプリケーション)にリングを使用し、メンバーシップ検出にクリークを使用するだけですか?

5
zengr

あなたの例では:

私はノードが彼の直接の隣人が何であるかを知っているとは思わない。隣人が2人いるだけで、どちらかはわかりません。

ノード4はノード3とチャットしたいと考えています。

  • ノード4はメッセージをノード1に送信します(リング方向のみ)。
  • ノード1は、メッセージが彼宛てではないと判断したため、ノード2にメッセージを渡します。
  • ノード2は、メッセージが彼宛てではないと判断したため、ノード3にメッセージを渡します。
  • ノード3はメッセージを受け取り、それが彼のためのものであることを確認し、それを解析します。

「うわさ話」は、ノード1と2が会話をリッスンする場所です(これは促進に役立ちます)。ノード4とノード3について聞くことで、両方をメンバーシップリストに追加できます。

これで、ノード1と2の両方が、ノード4と3に他のメンバーを知っているかどうかを尋ねることができます。

ノード1が最初にノード4に質問するとします。 Node 2と3は、ゴシップを聞いてノード1の存在を確認します。

この時点では誰もノード2について知りませんが、最終的には、別のノードにメンバーシップリストを要求することで、ノード2の存在を明らかにします。

これにより、通信回線が切断されることはありません。

2
Joppe