« [Diary+P2P]アクセス状況と未来予想 | トップページ | [P2P]コンテンツ流通の偽装対策 »

2004.12.25

[P2P]DHTの掲示板システムの検索・負荷分散の考察

クリスマスは新国立劇場で久しぶりにバレエを見た。
クリスマスというとバレエではチャイコフスキーの「くるみ割り人形」が定番だが、今までは組曲版しか聞いたことが無くて、今回全曲を聴いたときは新鮮だった。ストーリーは分かりやすいし、バレエも面白いし見た目もキレイなのでバレエ入門者でもきっと楽しめる内容だと思う。

さて本題に入ろう。
DHT(分散ハッシュテーブル)を使った掲示板システムについては既にHPに書いてあるので詳細は省く。
ここではそれをベースにして色々な懸念点を解消する改良案を見出して行きたい。

まず、DHTを使うとあいまい検索がしずらい。ところで掲示板で検索をする時に、どの部分が検索の対象にするかといえば、恐らくスレッドのタイトル名だろう。つまり、ここの部分をまずあいまい検索するようにできないだろうか?

考えられる手段として次のような方針を考えよう。
・スレッドのタイトルの名前及びそのハッシュの対を集めたノードを設ける(これをタイトルノードと呼ぼう)
・スレッドの中身自体はスレッドの名前をNameとすればNode_ID=hash(Name)に格納。

こうすれば、まず掲示板システムを利用する人はタイトルノードにアクセスして、そのノードに含まれるタイトル一覧から選べばよい。そうすれば自ずとあいまい検索もできるわけである。

ただし、このようなシステムだとタイトルノードに負荷がかかりすぎる。そこで

[対策1]カテゴリを複数設け、カテゴリ毎にタイトルノードを設置する

ことが考えられる。そうすれば、あるカテゴリを参照する時のみそのカテゴリの対象となるタイトルノードに負荷がかかることになる。

これでだけでは人気のあるカテゴリではタイトルノードにやはり負荷がかかることが考えられる。そこで、

[対策2]カテゴリ毎にそれを管理するタイトルノードを複数設置する。それをクライアントのIP毎に負荷分散させる。

ことを考えて行きたい。

例えば、今クラシックというカテゴリがあったとする。その時にタイトルノードは
[Node0] Node_ID=10000
[Node1] Node_ID=10100
...
[Node_9] Node_ID=10900

のように10個設ける。メインとなるノードはNode0で基本的に情報の変化があればこのノードのみ書き込みを行い、この内容を他のノードが複製する。

このクラシックのカテゴリにアクセスする場合には、クライアントのIPアドレスをIPとすると
NodeX=10000+[hash(IP) mod 10]×100
となるNodeXにアクセスすれば良い。これはロードバランサーのハッシュによる負荷分散と同じ方法である。
(注意!DHTの場合、一般にハッシュ空間が大きいので、上記の式の係数(ここでは100)は注意深く検討しなければならない。そうしないと、全く負荷分散にならない可能性がある。)

DHTだと負荷が分散されるのだが、場合によってはある特定ノードに対しての負荷が集中することも考えられる。このような、特定ノードに対する負荷分散の考慮は論文等を見るとあまり検討されていないように見受けられるが、いずれ重要な要素となるだろう。

|

« [Diary+P2P]アクセス状況と未来予想 | トップページ | [P2P]コンテンツ流通の偽装対策 »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/18781/2375337

この記事へのトラックバック一覧です: [P2P]DHTの掲示板システムの検索・負荷分散の考察:

« [Diary+P2P]アクセス状況と未来予想 | トップページ | [P2P]コンテンツ流通の偽装対策 »