Pastry Distributed Hash Tableを実装しようとしていますが、いくつかのことが理解を逃れています。私は誰かが明らかにできることを望んでいた。
免責事項:私はコンピューターサイエンスの学生ではありません。私は人生で正確に2つのコンピューターサイエンスコースを受講しましたが、どちらもリモートで複雑なものを扱っていません。私はソフトウェアで長年働いてきたので、アイデアに頭を包むことができれば、実装タスクに任せていると感じます。だから、明らかな何かを見逃しているだけかもしれません。
著者が発表した論文[1]を読んで、ある程度の進歩を遂げましたが、ルーティングテーブルの動作に関するこの1つの特定のポイントに固執し続けています。
論文は、
ノードのルーティングテーブル、それぞれエントリの 行に編成されます。ルーティングテーブルの行のエントリは、nodeIdが最初のn桁で現在のノードのnodeIdを共有するが、番目の桁が可能な値のいずれかを持つノードを参照します現在のノードのID の番目の数字以外。⌈ ログ2 B N ⌉ 2 B - 1 2 B - 1件の、N 、N + 1 2 B - 1 、N + 1を
アプリケーション固有の変数、通常の略。簡単にするために使用しましょう。以上は4 b = 4
ノードのルーティングテーブル、、で構成されて ⌈ ログ16 N ⌉と行15個のエントリ毎。15行目のエントリNのルーティングテーブルのそれぞれは、その本のnodeIdノードののnodeIdを共有FIで最初のn桁のノードを参照するが、そのN + 1番目の数字は、の一つを有する2 B - 1以外の可能な値のn +を現在のノードのIDの1番目の数字。
よくわかります。さらに、はクラスター内のサーバーの数です。私もそれを得る。
私の質問は、エントリが配置される行がキーの共有された長さに依存する場合、なぜ行の数に一見ランダムな制限があるのですか?場合、各nodeIdには32桁があります(128ビットのnodeIdをbビットの数字に分割)。ときに何が起こるNが十分に高い取得⌈ ログ16 N ⌉ > 32?このシナリオにヒットするには340,282,366,920,938,463,463,374,607,431,768,211,457(私の計算が正しければ)サーバーが必要だと思いますが、奇妙な包含のように思え、相関関係は説明されません。
さらに、サーバーの数が少ない場合はどうなりますか?サーバーが16台未満の場合、テーブルには1行しかありません。さらに、どのような状況でも、行のすべてのエントリに対応するサーバーはありません。エントリを空のままにしておく必要がありますか?私は、少数のサーバーを考えると、リーフセットでサーバーを見つけることができることを理解していますが、2番目の行にも同じ困惑が生じています-nodeIdを持つサーバーがない場合n番目の桁のあらゆる可能な順列を埋めることができますか?最後に、たとえば4台のサーバーがあり、32桁のうち20桁を共有する2つのノードがある場合、何らかのランダムな方法で...そのノードのテーブルの20行にデータを入力する必要がありますいっぱいに近づくよりもはるかに多くの行がありますか?
ここに私が思いついたものがあり、これを自分のやり方で推論しようとしています:
- そのプレフィックスに正確に一致するノードが存在しない場合、エントリはヌル値に設定されます。
- nodeIdの共有長に一致するのに十分な行が存在するまで、空の行が追加されます。
- 目的のメッセージIDに一致するエントリがない場合にのみ、共有長が現在のnodeIdの値以上であり、エントリが現在のノードより数学的に近いnodeIdのルーティングテーブルの検索にフォールバックします。 nodeIdは目的のIDです。
- #3で適切なノードが見つからない場合は、これが宛先であると想定し、メッセージを配信します。
これら4つの仮定はすべて維持されますか?これに関する情報を探している他の場所はありますか?
- ペストリー: A. Rowstrong and P. Druschel(2001)による大規模なピアツーピアシステム用のスケーラブルな分散オブジェクトの場所とルーティング - こちらからダウンロード