分散ハッシュテーブル入門(DHT)〜その1


この章ではPure-P2Pにおいて最近必須技術となりつつある分散ハッシュテーブル (DHT:Distributed Hash Table)についてわかりやすく説明します。

まずはこのページを見てDHTに対する感覚を覚えていただき、その後に 著名な論文等で具体的な内容等を見て頂ければ理解が進むと思います。 DHTの詳細な説明については拙著「P2P教科書」をご覧下さい。


1.イントロダクション
ではまずおさらいとしてP2Pの種類について復習しましょう。

P2Pは大きく分けて
・Hybrid-P2P(Napster型)
・Pure−P2P(Gnutella型)
の2種類があった。

Hybrid型は中央サーバが存在し、中央サーバに各ユーザの情報を登録しておく。 ユーザは中央サーバの情報を基に各PCとP2Pで通信するわけである。

逆にPure-P2Pにはサーバと言うものが存在しない。PCは数珠繋ぎ上にネットワークを構築して、そして自分の欲しいデータ情報などをそのネットワーク上に問い合わせするのである。

ではお互いの長所・短所を考えてみよう。

Hybrid-P2Pでは全PCの状態について中央サーバが管理できる。 これによって非常に多くのPCと通信をすることができる。しかし、 ユーザが増える毎にサーバを増設しなければならず、管理者にとっては頭の痛いタネ となる。物凄いコスト増であることは想像できるだろう。

Pure-P2Pではサーバがないためにソフトだけ各PCに導入すればサービスが実現 できる。つまりコストが安く導入することができる。しかしユーザが増えるとユーザ 間の連携のための情報が増加し、ネットワーク負荷が高まったり、あるいは、通信を する事ができない相手が存在することが生じてくる。

このようにHybrid-P2P、Pure-P2P両者も欠点を持っている。 しかしDHTの登場によりこの状況は一変する。

DHTはPure-P2Pであってもネットワーク負荷はそれほど上がらず、またネットワーク に参加している全PCとの通信ができるようになるになるのだ。おまけに相手のPCに 対する検索も非常に高速だ。Pure-P2Pの場合は数10万ノードぐらいが限界だと 言われているが、DHTを使うと数10億ノードの通信が可能となる。ここでノードは PCと考えても良い。(今後はノードという言葉を使う)さらに、ノード がいきなりネットワークから参加したり離脱することも考慮されている。 また、DHTを使う事で多くのP2Pアプリケーションの作成について容易できる事が期待 できる。

こう書くとDHTは長所だらけと思われるが、短所もある。それは実装が難しい事だ。 しかしいずれはDHT用のライブラリーが普及し、この問題は解決するだろうと思われる。

もう少し話を進めよう。普通のPure-P2Pではメタデータを分散化することが できた。このメタデータとはコンテンツの状態を示す情報を指し、 検索・参照をするためのデータとなりうる。例えば ファイル名、著作権者名などが相当する。DHTはこの考え方を一歩進めている。 例えば 「バッハ」に関するデータの所在(つまりメタデータ)を知りたければ あるユニークな一つのノードがそれを管理することになる。他のノードが「バッハ」 というメタデータを管理する事は基本的にはない。DHTではメタデータを 「自律的に」「ユニークなノード」で管理することが可能だ。


2.あいうえおDHTで感覚をつかもう!
さて、DHTはPure-P2Pで動く、ということはサーバがない。 サーバがない、ということはデータを各ノードが分散して管理することになる。 ここで、各ノードが保持する情報例としてファイル名とそのファイルを保持している ノードのIPアドレスのペアとしよう。

さて、DHTの説明をわかりやすくするために、教育用として「あいうえおDHT」を導入 する。 (注意:もちろん、こんなDHTはない。あくまでもわかりやすく説明するためです。)

今、ファイル名は「あいうえお」で記述できるとしよう。とりあえず濁点、半濁点は 無視する。そうすると頭文字は50文字となる。

「あいうえおDHT」では各データをこのように管理する。 いま、ノード数が丁度「あいうえお」と同じ数(50個)だけあると仮定する。 ノードにはそれぞれノード「あ」〜ノード「わ」まで名前が付けられているように しよう。ノードとはPCと同じと考えれば良い。

「あいうえおDHT」では、ノード「あ」については、「あ」から始まるファイル名を 管理する。ノード「い」は「い」から始まるファイル名だ。 こうなると、ノード「あ」〜ノード「わ」まであれば、全ての「あいうえお」で 書かれているファイル名を分散して管理することができる。これが、DHTのキモである 分散的にデータを管理する方法だ。

つまり、あるノードが存在すると、そのノードには「管理すべきデータの範囲」が きちん決まっており、その「管理すべきデータ」を所有することになるのだ。

もう一度説明しよう。 例えば「モナリザ」というファイル名があれば、それに関するデータはノード「も」 が管理する。もし「モナリザ」に関するデータがほしければ、ノード「も」に 問い合わせれば良いのだ。そして、あるノードが「もしもピアノが弾けたなら」と いうデータを持っていれば、ノード「も」に対して、これに関するデータの登録 をする。この考え方は本来のDHTと全く同じだ。

さて、「あいうえおDHT」について述べてきたが、残念ながらこれでメデタシ、メデタシと言うわけにはいかない。 なぜならば各ノードの負荷に不公平感が出てくるからだ。 次のページに行く前にその理由を考えてみて下さい。

NEXT

TOPページに戻る