Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DHT : Kademlia

DHT : Kademlia

GOTO Lab. P2P 勉強会資料

Ryo Yoneyama

June 02, 2009
Tweet

More Decks by Ryo Yoneyama

Other Decks in Technology

Transcript

  1. DHT のアルゴリズム 》 Chord × 円状スキップリスト 》 Kademlia × 2分木

    》 CAN × N次元トーラス 》 Pastry × Plaxton アルゴリズム 2009/6/2 DHT: Kademlia @ RyoWiki 4
  2. Kademlia 》 動的な Node ID × Chord は静的な Node ID

    》 経路表は2分木 × 通常のメッセージ送受信で更新可能 》 ノード間の距離は XOR で定義 × Symmetric な経路表になる 》 Node の入れ替わりに強い × Node が1時間後に生存している確率1/2 2009/6/2 DHT: Kademlia @ RyoWiki 5
  3. ハッシュ空間 》 Key, Node ID は 160bit (SHA-1 を想定) 》

    距離は Hash Key 同士の XOR 》 2文木構造なので探索は 2009/6/2 DHT: Kademlia @ RyoWiki 6 |D| = 2160 O(log N) 2 d(x,y) := x◦y (x,y∈D) +
  4. k-bucket 》 ルーティングテーブル × Chord の Finger Table っぽい? 》

    IP アドレスを1つの i に対して最大 k 個保持 × 大体,k = 20 くらい? 》 新しいノードから削除 × 古くから残るノードほど安定している 2009/6/2 DHT: Kademlia @ RyoWiki 7 2 ≦ d(x,y) < 2 (0≦i<160) i i+1
  5. k-bucket 》 Kademlia の経路表 × 1つの Node が160 個の k-bucket

    を持つ 》 自分との距離が 》 である Node のリスト × <IP address, UDP port, Node ID> のタプル 》 参照された時刻が古い順にソート × 参照したノードは末尾へ移動 2009/6/2 DHT: Kademlia @ RyoWiki 9 2 ≦ d(x,y) < 2 (0≦i<160) i i+1
  6. Kademlia: 2分木構造 2009/6/2 DHT: Kademlia @ RyoWiki 10 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 ) = 001 XOR = 001 XOR 100 = 101 → 5 (10進数) d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 Hash(
  7. ルーティングテーブル 2009/6/2 DHT: Kademlia @ RyoWiki 11 基準 Node (Self

    Node) 0 0 0 0 0 0 0 1 1 1 1 1 1 1 d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 i = 0 i = 1 i = 2 i d k-bucket の Node 0 1 000 1 2 ~ 3 010, 011 2 4 ~ 7 100, 101, 110, 111
  8. k-bucket の更新 》 メッセージを受け取ったときに更新 × PING, STORE, FIND_NODE, FIND_VALUE 》

    メッセージに含まれる Node ID (N) を参照 × N∈k-bucket -> 最後尾へ N を移動 × ¬N∈k-bucket ∧ › |k-bucket| < k -> 最後尾へ N を追加 › |k-bucket| = k -> 先頭 Node 生存確認 ◦ Offline -> 先頭 Node を削除して最後尾へ N を追加 ◦ Online -> 先頭 Node を最後尾へ移動 (N は破棄する) 2009/6/2 DHT: Kademlia @ RyoWiki 12
  9. Key-Value 》 Node ID は Chord と同様に決定 》 Hash(key) で位置を決定

    × Hash は適当なもの › MD5, SHA-1 やシフト演算で自作したり・・・ › 論文的には SHA-1 を想定 (160bit のハッシュ) 2009/6/2 DHT: Kademlia @ RyoWiki 14
  10. Kademlia: 2分木構造 2009/6/2 DHT: Kademlia @ RyoWiki 15 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 ) = 001 XOR = 001 XOR 100 = 101 → 5 (10進数) d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 Hash(
  11. FIND_NODE ① 2009/6/2 DHT: Kademlia @ RyoWiki 16 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 Message を出す Node (基準 Node) 目的の Node
  12. FIND_NODE ② 2009/6/2 DHT: Kademlia @ RyoWiki 17 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 Message を出す Node (基準 Node) 目的の Node
  13. FIND_NODE ③ 2009/6/2 DHT: Kademlia @ RyoWiki 18 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 Message を出す Node (基準 Node) 目的の Node i = 0 i = 1 i = 2 k-bucket 2 ≦ d(x,y) < 2 (0≦i<160) i i+1
  14. FIND_NODE ④ 2009/6/2 DHT: Kademlia @ RyoWiki 19 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 d = 1 d = 3 d = 2 d = 5 d = 4 d = 7 d = 6 Message を出す Node (基準 Node) 目的の Node i = 2 目的の Node に一番近い k-bucket を参照していく (i=2 に属する Node)
  15. FIND_NODE ⑤ 2009/6/2 DHT: Kademlia @ RyoWiki 20 0 0

    0 0 0 0 0 1 1 1 1 1 1 1 Message を出す Node (基準 Node) 目的の Node 目的の Node に一番近い k-bucket を参照していく (i=1 に属する Node) 中継 Node d = 6 d = 4 d =5 d = 2 d = 3 d = 7 d = 1 i = 0 i = 1 i = 2
  16. FIND_NODEの経路 2009/6/2 DHT: Kademlia @ RyoWiki 21 0 0 0

    0 0 0 0 1 1 1 1 1 1 1 Message を出す Node (基準 Node) 目的の Node への経路例 から
  17. プロトコル • PING • STORE • FIND_NODE • FIND_VALUE •

    Node の新規参加・脱退 2009/6/2 DHT: Kademlia @ RyoWiki 22
  18. Kademlia のプロトコル 》 Kademlia のプロトコル (RPC) は4種類 × PING ×

    STORE × FIND_NODE × FIND_VALUE 》 RPC (Remote Procedure Call) × 返答を待たない非同期 RPC × すべてにランダムな ID が付く (ID: 160 bit) › アドレス偽装などを防ぐ 2009/6/2 DHT: Kademlia @ RyoWiki 23
  19. Kademlia のデータ構造 》 コンタクトタプル × <IP address, UDP port, Node

    ID> triples 》 コンテンツ × <key, value> pairs 》 配置方法 × ノード間の配置 (ルーティングテーブル) × コンテンツの配置 (担当ノード) 2009/6/2 DHT: Kademlia @ RyoWiki 24 min d(NodeID, Key) 2 ≦ d(x,y) < 2 (x,y∈NodeID; 0≦i<160) i i+1
  20. PING 》 Online かどうか問い合わせる 》 送信元アドレスが含まれる × 送信元アドレスをもとに k-bucket を更新可能

    × PINGs can also be piggy-backed on RPC replies for the RPC recipient to obtain additional assurance of the sender’s network address… 2009/6/2 DHT: Kademlia @ RyoWiki 25
  21. STORE 》 管理ノードに <key, value> を保持させる × 管理ノードは 》 レプリケーションは

    k 個? × STORE する側とされる側は定期的に re-publish しないといけないっぽい 2009/6/2 DHT: Kademlia @ RyoWiki 26 min d(NodeID, Key)
  22. FIND_NODE 》 FIND_NODE (key) 》 Key に近いノード k 個のコンタクト先 》

    要求を受けたノードは k-bucket の中身を返す × k-bucket が満杯でなければ周辺から補う 2009/6/2 DHT: Kademlia @ RyoWiki 27
  23. FIND_VALUE 》 FIND_VALUE (key) 》 FIND_NODE と同じ × ただし,問い合わせ先のノードが key

    に対応する value を保持している場合は k-bucket ではなく, value を返す。 2009/6/2 DHT: Kademlia @ RyoWiki 28
  24. Node の新規参加・脱退 》 新規ノードの k-bucket を作成する × 新規ノードに近い k 個のノード情報を貰う

    》 Node lookup により k-bucket を作成する × Recursive アルゴリズム × FIND_NODE を利用する × 他ノードへ周知することができる 2009/6/2 DHT: Kademlia @ RyoWiki 29
  25. Node lookup 》 k 個の近い Node ID を貰う 》 リストの中からα個の

    NodeID を選択 × 論文ではα=3としている 》 選択した Node へ非同期に並行して lookup 》 新しく得られた Node ID に対して lookup × 知り得た限りの Node へ lookup したら終了? × 返答がなかった Node は削除? × 誰からも返答がなかったら? 2009/6/2 DHT: Kademlia @ RyoWiki 30
  26. うpだて処理のあれこれ 》 ノードの入れ替わりへの対応 × 担当ノードがいなくなった場合 × 新規ノードがより key に近い場合 》

    Re-Publish <key, value> × every hour 》 Original Publishers × to republish all <key, value> every 24 hours 2009/6/2 DHT: Kademlia @ RyoWiki 31
  27. Publish 》 インデックス情報の管理 × インデックス情報: <key, value> 》 Key に最も近いノード

    k 個へ STORE × 1時間ごとに実行 》 Original publisher は24時間毎に publish × Original による STORE 出なければ expire 2009/6/2 DHT: Kademlia @ RyoWiki 32
  28. Caching 》 FIND_VALUE したノードが cache? × よく解んないので良しなに・・・w × Future searches

    for the same key are likely to hit cached entries before querying the closest node. During times of high popularity for … (以下略) 2009/6/2 DHT: Kademlia @ RyoWiki 33
  29. Kademlia のあれこれ 》 細かいところがよく解りません><; × RPC に付けるランダムな ID の扱い ×

    Node lookup 終了判定 × コンテンツのレプリケーション 2009/6/2 DHT: Kademlia @ RyoWiki 35
  30. Kademlia の課題 》 Optimized Contact Accounting × k-buckets is to

    provide LRU checking 》 Accelerated Lookups × To achieve fewer hops per lookup by increasing the routing table size 》 パラメータ関連 × FIND_NODE で選択するα個の Node 選択方法 × Publish の最適化 2009/6/2 DHT: Kademlia @ RyoWiki 36
  31. 感想 》 Key-Value ってかんたん × 分散しなければ・・・ 》 スケールアウトってやばい × スケールアップは簡単

    (お金かかるけど) 》 クラウドってすげぇ × 技術的な意味で 》 英語ムズカシイ><; × ふいんき (←なぜか変換できない) しか解らない 2009/6/2 DHT: Kademlia @ RyoWiki 37
  32. 参考文献 [1] Kademlia: A Peer-to-peer Information System Based on the

    XOR Metric × Petar Maymounkov and David Mazieres [2] Kademlia × 首藤一幸 2004年 7月 [3] アリエル – P2P 探索技術 × http://dev.ariel- networks.com/modules/xfsection/article.php? articleid=29 2009/6/2 DHT: Kademlia @ RyoWiki 39