[P2P]DHTのグリッドへの応用を考える
□はじめに
プライベートな事ですが、昨日バイオリンの発表会で演奏をしました。弾いたのはハイドンの有名なストリングカルテット(弦楽四重奏)「ひばり」です。ストリングカルテットとはバイオリン×2人、ビオラ×1人、チェロ×1人の構成で演奏を行うのですが、それぞれのパートが有機的に絡み合うので、お互いの演奏を聴きながら弾かないと、きれいな演奏はできません。今回は初めての挑戦だったのか、7割ぐらいの出来でした。やっぱり本番だと緊張してうまく弾けないですね。またチャレンジしてみたいものです。
プログラムの分散処理もストリングカルテットに近いのかもしれません。プログラムを並列化、小さなタスクに分割し、それぞれのノードに渡し、さらに結果を統合します。ノード間の協調がうまく行かないと、処理が滞ってしまいます。
今回はDHTと使ってグリッド(ここでは分散処理と言う意味)への応用を考えてみます。なおグリッドについては、それほど知識がないので、的をはずした指摘をしている可能性があります。
□ノードIDとタスクの関係
実はかなり前にDHTとグリッドの関係は私のBlogで指摘しています。
[P2P]DHTとグリッドは結びつくのか?
今回の話は上記の記事の抽象化及び簡潔化をしたものです。
DHTでは(あるいはKBRでは)ノードにノードIDと言われる一意のIDが振られています。通常、ノードIDを使ってデータの格納や入手を行う事になります。
ここで大切なのはノードIDが一意のIDであることです。
少し発想を飛ばしてみましょう。パソコンのメモリ空間を考えるとメモリ空間もアドレスと呼ばれる一意のIDのようなものがあります。メモリ空間の住所です。すると、メモリ空間とノードIDの間に類似性が生じます。つまり、ノードの状態がある程度理想的であれば、メモリ空間をノードIDに対応できるのではないかということです。つまり、DHTをうまく利用できれば複数のノードでプログラミング処理が可能となります。
このアイデアに更に応用を加えましょう。せっかく複数のノードがあるので、うまく並列化をすれば、各ノードに対して小さなタスクに分割して処理を与える事が可能です。プログラミングを並列化するのは、単一ノードの方が単純だと思いますが、もしかすると複数ノードでもできるのかもしれません。
さて、あるノードが落ちた場合はどうでしょうか?単純なDHTを使うとそのノードが処理していたタスクは途中で終了してしまいます。そこで、DHTでよく使われるレプリカの応用をしましょう。
あるノードID=Xが管理しているタスクTask_ZをノードID=X+A(Aはある整数)となるノードにも実行させます。するとノードID=XがDHTから抜けてもノードID=X+Aは処理を終了できます。あるいはノードID=XかノードID=X+Aのどちらかで処理回答が早いノードの結果を採用するという手もあります。タスクのレプリケーションが増えれば、処理が高速化しますし、ノードの離脱に対する耐性にも強くなるでしょう。ただしそれだけシステムとして見た場合のリソース消費に繋がります。
分散コンピューティングで有名なものとしてSETIがあります。実はDHTをうまく使うと、分散コンピューティングアーキテクチャの構築が今までより容易に実現できる可能性があります。
P2Pでファイル共有、あるいは分散ストレージの開発・実装が現在でもホットな状況ですが、このような分散コンピューティングにも開発の視野を広げると意外と世間(特に政府や企業)から注目されるかもしれません。
「P2P」カテゴリの記事
- [P2P]Websocketでブラウザ間P2P通信は実現できるか?(2011.10.30)
- TwitterをP2Pで実現する方法をもう少し考えてみる(2010.05.03)
- オフィスツアー(ビットメディア)を振り返る(2009.10.25)
- [開催日変更]オフィスツアー(株式会社ビットメディア)参加者募集のご案内(2009.08.14)
- [NAT]NAT越え入門1-NATとは何か?(2009.04.11)

Comments