DHT アルゴリズムのKademlia まとめ
DHT: Distributed Hash Table (分散ハッシュテーブル)
ハッシュテーブルを複数のノードで管理するアルゴリズムです。P2Pで良く使われる技術です。
アルゴリズム
- Chord: 円状スキップリスト
- CAN: N次元トーラス
- Kademlia, P-Grid: 2分木
- Tapestry, Pastry: Plaxtonアルゴリズム
Kademlia
間違いが多々あると思うので,原文を参照してください。
Kademlia: A Peer-to-peer Information System Based on the XOR Metric
Kadmlia 論文のまとめ
- ノードが機能停止した場合に,自主的にネットワークが回復するためのアルゴリズム
- ネットワーク内に流れるメッセージを最小限にする。
- あるノードが1時間後にネットワーク内に存在する確率を1/2と仮定
- ノードにランダムな ID (160-bit) を振る
- Key と Node ID は 160bit の数字で管理
- あるノードから別のノードへの問い合わせは O(log N)
- 探索範囲は 1/n で減少
- 近いノードへの探索は密で,遠いノードへの探索ほど疎な探索になる。
- lookup など通常のメッセージのやり取りでネットワークを維持する事が出来る。
- ネットワークから離脱する際に特別な処理は必要ない。
- Node ID と IP:UDP-Port の組み合わせで問い合わせする。
- ノード間の距離は XOR で定義される。
- 2分木構造になり,距離の近いノードが同じ枝に存在する可能性が高い。
k-bucket
- 「自ノードからの距離」が [ 2^i , 2^(i+1) ) のノードのリスト
- 一つの i につきノードの IP アドレスを最大で k 個保持 (k = 20)
- k-bucket のノードは古い順に並べる
- k-bucket が一杯の場合,先頭 (一番古いノード) の生存確認を行う。死んでいたらそのノードを外し,新しいノードを最後尾に追加する。生きていたら,そのノードを最後尾に移動する。(k-bucket への新規追加はしない。)
- 探索は開始ノードの k-bucket から目的の Key に一番近い Node ID を返す (反復)