[P2P]P2P WEB ~P2Pとサーバ=クライアントモデルの狭間で
最近色々な方がP2P WEBについて議論している。まだP2P WEBについてはっきりとした「定義」がされてないので混乱している状況と言っても良いかもしれない。私もはっきり言ってP2P WEBの概念を完全に把握している訳ではない。
ここで、P2P WEBの「自分なりの定義」をしてみたいと思う。もしかすると通常の認識よりも拡張しているかもしれない。(※定義については色々な方のコメントを頂きたいと思っています。)
定義1:個々のノードはクライアントとして「ブラウザ」を通して各種のサービスの提供を受ける。
定義2:個々のノードには最低限、クライアントにHTML(XMLでも可)を表示させるようなWEBサーバが入っている。ノードによってはWEBサーバのバックエンドにデータベースアプリケーションが存在する。
定義3:(上記に関連して)サービスは動的なページも含まれる。
定義4:個々のノードのリソースにはハッシュ、URIなどの一意的な意味情報でアクセスできる。IPアドレス等の知識は(通常使用する分には)不要。
ここで、各ノードは分散ハッシュで構成することと仮定する。分散ハッシュを導入すると余計な議論を省く事ができるからである。
まず、定義1、定義4は分散ハッシュで既に実現していることであるから、ここでは取り上げない。
問題は定義2、3である。これはサーバで言うとWEBサーバにCGIを入れているケースが想定される。
上記を実現する方法で簡単に思い浮かぶのは、DDNSを使ったサーバ構築である。
分散ハッシュでいうと、自分が構築しているサーバAをオーバレイネットワークに公開したいとすれば、サーバAの名前をnameとしてNode_ID=hash(name)と言うノード(ノードBとしよう)にノードAのメタ情報(IPアドレスなど)を通知すれば良い。このようにすれば、ユーザにDDNSの知識がなくても、サーバはオーバレイネットワーク上に公開できるし、Ringochなどのゲートウェイを通して通常のインターネットユーザにもリソースを提供できる。
ノードは自分で管理しているので、「自己責任」の下、どのようなアプリケーションを入れようが設定しようが構わない。もちろん、自ノードが落ちると、自ノードへアクセスしようとする人は接続する事ができない。回避する方法として先ほどのノードBがプロキシになる方法がある。つまり、クライアントがノードAにアクセスする時には必ずノードBを通ることとする。プロキシのキャッシュ機能により、「ある程度」ノードAの情報を提供できる。
もう一つの方法はやや難しい。(そして本当にどこまでできるのか私も、わからない。)
それはCGIなどの機能を他ノードの引き渡す事である。つまり、ノードAはノードBに対して、CGIや情報を渡す。管理者Aの要望を実行しているのはノードAではなく、ノードBである。そして、ノードBはノードB自身が落ちた場合に備えてCGIをある一定ハッシュ空間内のノードに複製する。
しかし、これではノードAが悪意のコードを入れることによりノードBをクラッシュすることができる。
そのため、対策の一つとしてはCGIの機能などを制限する事が考えられる。P2PミドルウェアによってCGIの実行の制御管理がされていることを意味する。(おそらくCGIが他ノードから渡された時にミドルウェアで脆弱性等をチェックするのだろう。)これが実現できれば、ノードが複数落ちたとしても柔軟に動的なWEBサービスが実現できる。実装にはグリッドなどの知識が利用できるかもしれない。Wikiはこれの一種の限定版と見なせるかもしれない。
(このようなミドルウェアやOSでCGIの機能を制限している例としてiアプリなどが挙げられるだろう。)
後者が実現すれば、かなり柔軟なサービスが展開することが期待できる。例えば自分なりのオンラインゲームを始めたり、自分用にカスタマイズしたチャットルームなどができる。一般のインターネットスキルのユーザがISPなどのレンタルサーバを借りないとできなかった事が容易にできる可能がある。まるで、設定不要のフリーソフトをインストールするように。
P2P Todayの横田氏がBlogで書いているようにP2P技術は普通のインターネットユーザにサーバ(P2Pなのに[サーバ]というのは定義的には変かもしれない。サーバ機能といった方が適切かな。)を与える革命的な技術になるかもしれない。
| 固定リンク
この記事へのコメントは終了しました。
コメント