[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」カテゴリの記事
- WebRTCを実現するためにSTUNだけでなくTURNも必要な理由(2015.01.08)
- [P2P]P2Pストリーミングのサーベイ文書について(2014.11.09)
- Winnyの開発者、金子 勇氏の急逝を悼んで(2013.07.07)
- 「分散ハッシュシステムでのNAT超えの考察」に対する質問について(2012.12.16)
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(その2)(2011.11.20)
この記事へのコメントは終了しました。
コメント