« [P2P]P2Pプロキシでなにか面白いことができるか? | トップページ | [セキュリティ]匿名性は必要か? »

2005.03.06

[P2P]DHTとグリッドは結びつくか?

P2P勉強会で首藤氏がP2Pとグリッドとの関連について話した。
それとはほとんど関係ないのだが、DHTを使ってグリッドを構築する事は可能なのかな?と少し思ったのでメモしてみる。
※ちなみにグリッドについてはほとんど知らないので、全然的外れだったらゴメンナサイ。。。

あるノードAについてはジョブを持っていて、それを数個のタスクに分解する。そのタスクをあるノード群に処理させて、
それをまたノードAに戻す。。基本的にはこんな流れだ。

DHTを使えば全てのノードに対してタスクを投げる事が可能だ。今のグリッドではどのぐらいのノードまで管理できるかわからないが、DHTを使えば数10億ノードに対してタスクを分解して処理を任せることができる。ルーティングについてはDHTに任せてしまい、タスクについてはランダムに振ったハッシュ値の管理するノードに任せようとするわけである。

こう考えると色々と課題があります。

1)ノードは処理能力についてバラバラである。どうすればよいか?
例えば、あるタスクを複数ノードに投げる。ここで一番早く処理が帰ってきたノードの結果を採用する。
処理のターンアラウンド時間とノードがDHTに留まっている時間を考慮すれば、いずれはノードがそれを学習して処理スピードが早いノード群に分散して処理を投げると言う事になる。あるいは、簡単な処理だが数が多いものについては、多少処理時間が遅いノードに任せると言う手もある。
こういうことが自律的にできればいいなぁ。

2)DHTからノードが離脱する場合があります。どうすればいい?
これも複数ノードに同じタスクをさせることで回避できます。

3)複数ノードに対して処理を投げるとその処理が大変そうですが。。。
これは、アプリケーションマルチキャストをすることで行えば大丈夫だと思います。
つまり、ノードAはノードBに処理を委託しますが、実際にはノードB⇒ノードC,D,E,Fだったりします。
またノードCがその処理が重く、その処理を分割できそうであれば更にノードC⇒ノードG,H,I,Jなどに分割してタスクを渡します。
このようにタスクに応じて、マルチキャストみたいに処理がノードに「自律的に」分割できれば面白そうですね。

4)タスクはきちんと分散されるの?
ハッシュ値は乱数で決まるので最初は分散されるはずです。ノードがレスポンス状態を学習していくと、性能良いノードにある程度負荷をかけ、性能に劣るノードは軽い処理を主に行うようにします。ただし、ノードに対してある閾値い以上に負荷をかけないようにします。

5)学習した結果はどうするの?
DHTを使って、性能が良いノードについては登録できるようにすれば良いと思います。とは言え、登録されたノードだけ処理がかかるのはまずいので、最初はランダムで負荷分散処理をさせ、性能が劣化した場合登録されたノードを使用するということが考えられます。そうすれば、新しいノードで性能の良いノードが見つかる可能性があります。

こんな感じかな。個人的には面白そうなんですけども、だれかやってみる方いらっしゃいませんか?

|

« [P2P]P2Pプロキシでなにか面白いことができるか? | トップページ | [セキュリティ]匿名性は必要か? »

P2P」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: [P2P]DHTとグリッドは結びつくか?:

« [P2P]P2Pプロキシでなにか面白いことができるか? | トップページ | [セキュリティ]匿名性は必要か? »