米サン・マイクロシステムズが,PtoP(ピア・ツー・ピア)の共通基盤確立を目指したプロジェクト「JXTA」(ジャクスタ)の全容を明らかにした。これまで独自の技術で作られてきたナプスタやGnutellaなどのPtoPアプリケーションを相互接続可能にすることが狙い。アイデアは,ネットワーク上のコンピュータをグループ化し,相互に通信できるようにするというシンプルなもの。ただし,ディレクトリやセキュリティの機能に関しては不十分な点が残る。

安東 一真=andoh@nikkeibp.co.jp)

 米サン・マイクロシステムズは4月25日,同社のWebサイトで,PtoP(ピア・ツー・ピア)の共通基盤確立を目指すプロジェクト「JXTA」(ジャクスタ)の全容を明らかにした。概要は2001年2月に発表していたが,今回は詳細を明らかにした。

 PtoPは,インターネットにつながった無数のコンピュータを,巨大な分散コンピューティング・システムのように使うための技術。例えば,単独のWebサイトでは扱えないような大量の音楽ファイルでも,多数のコンピュータが分担して保持しておけば,ユーザー間で自由に交換できる。こうしたサービスを,米ナプスタやフリー・ソフトのGnutellaなどが実際に提供している。暗号の解読や科学計算といったぼう大な計算パワーを必要とする処理も,多数のコンピュータに分担させれば,超高速のスーパーコンピュータより速く実行できる可能性がある。このようにPtoPを使うことで,これまでにはないサービスが可能になる。

 JXTAは,このPtoPの相互接続性という課題を克服しようとするプロジェクトである。ナプスタやGnutellaなどのPtoPアプリケーションは,それぞれ独自の技術で作られてきた。そのため,異なるPtoPアプリケーションの間でコンピュータのリソースを共有したり,情報を交換することが難しい。そこでJXTAでは,各種のPtoPアプリケーションに共通する機能を洗い出し,それをフリー・ソフトとして提供する。PtoPの基本機能を共通化することで,PtoPアプリケーション間の相互接続の実現を目指す。

目的が同じコンピュータを集め情報交換を可能に

図1 JXTAのアーキテクチャ
JXTAの基本機能を提供する「JXTAコア」,多くのPtoPアプリケーションで共通に使われるサービスの「JXTAサービス」,PtoPアプリケーションの「JXTAアプリケーション」という3階層で構成する。

 サンは,JXTAバージョン1の仕様とソース・コードを公開した。機能は驚くほどシンプルである。JXTAの基本アイデアは,「インターネットにつながるコンピュータがグループとして集まり,パイプと呼ぶ通信路を使って互いに情報を交換できるようにする」(サン チーフ・サイエンティストのビル・ジョイ氏)こと。これに,コンピュータの状態やサービスの状態を監視する仕組みと,セキュリティ機能を付加したものが「コア」と呼ぶJXTAの基本機能である(図1[拡大表示])。

 機能はシンプルだが,共通の目的を持ったコンピュータを集め,1つのサービスを提供するには十分な機能と言えるだろう。一方で,他のベンダーがJXTAに独自のサービスを付加したり,独自のPtoPアプリケーションを開発する余地も十分残されていそうだ。

オープン・ソースで普及を図る

写真1 米アプライド・メタコンピューティングのデモ画面
同社のPtoPミドルウエアとJXTAを相互接続した例。Webサーバー上で動かしているJXTAアプリケーションから,同社のミドルウエアで実装したPtoPアプリケーション(ファイル・サーバー)に対して,その属性などを問い合わせている。

 JXTAの機能を強化し,実際に普及させるため,サンはLinuxやApacheの開発で成功したオープン・ソース・コミュニティの力を借りる。サンは,「jxta.org」と呼ぶオープン・ソース・プロジェクトを立ち上げ,そのWebサイト上でJXTAコアと,JXTAのサンプル・ソフトとして用意したUNIX風の「シェル」のソース・コードを公開した。今後は同サイト上で,仕様のブラッシュ・アップや拡充を進め,ソース・コードを拡張していく。

 実は,今回の発表の前から,外部の研究機関やベンダーが,JXTAの開発に参加していた。その1社である米アプライド・メタコンピューティングは,JXTAの発表の中で,自社のPtoPミドルウエアとJXTAエンジンとを相互接続してみせた(写真1)。アプライドのPtoPミドルウエアにJXTAプロトコルを付加して,JXTAベースのプログラムから,状態の問い合わせを受け付けたり,Webサービスへのアクセス要求を受理したりできるようにした。

 サンはこのように,jxta.orgの中でJXTAベースのアプリケーションの開発を促し,その実際の利用を促進する。そのなかで,JXTAの問題点を洗い出し,機能強化を図っていく。

どんな機器にも実装できる

図2 ピアとピア・グループの概念
JXTAでは,JXTAプロトコルを実装したマシンである「ピア」と,そのピアをグループ化した「ピア・グループ」があり,それぞれがPtoPサービスを提供できる。ピア・グループのサービスは,グループ内のピアが共同で提供するもので,複数のピア間で負荷を分散したり,冗長性を持たせたりできる。ピア・グループには,それに参加するピアが「コンテンツ」と呼ぶデータを共有する機能がある。

 JXTAの機能をもう少し詳しく見てみよう。JXTAが仕様として既定するのは,実際はワイヤ・レベルのプロトコルだけである。プロトコルのフォーマットはXMLで既定しており,OSや言語には依存しない。このためJXTAエンジンは,携帯電話やPDAなど,どんな機器にも実装できる。今回サンが公開したソース・コードはJavaで記述したものだが,これは1つの実装例にすぎない。

 JXTAプロトコルを実装したマシンは「ピア」と呼ぶ(図2[拡大表示])。ピアは,「グループ」を作成したり,その参加条件を決めたり,それに参加・脱退したりできる。ピアとピア・グループは,他のピアに対して「サービス」を提供する。ピア・グループが提供するサービスは,グループ内の複数のピア上で動作させることにより,負荷分散を図ったり,冗長性を設けたりできる。

 ピア間の通信には,UNIX風の「パイプ」と呼ぶ仮想的な通信路を用いる。ピアはパイプを作成したり,オープンしてデータを送受信する。

 こうした仕組みを実現するために,JXTAでは6種類のプロトコルを規定した(表1)。ピアやピア・グループ,またはそのサービスを探したり,ピア・グループやパイプを作成・管理するためのプロトコルである。

名 前 概      要
ピア・ディスカバリ・プロトコル ピアやピア・グループ,パイプ,サービスを発見するためのプロトコル。ブロードキャスト型とユニキャスト型(ディレクトリに対して)がある。名前やキーワードを指定して検索する
ピア・リゾルバ・プロトコル ピアやピア・グループ,パイプ,サービス,またはその状態や属性を検索するためのプロトコル。主に,ディレクトリ・サービスを提供するピア(ランデブ・ピア)間で利用する
ピア・インフォメーション・プロトコル ピアの状態(起動しているかどうかなど)やピアの能力(サービスや属性,エンドポイント)を調べるためのプロトコル。ピア・ディスカバリ・プロトコルで発見したピアに対して利用する
ピア・メンバーシップ・プロトコル ピア・グループに参加するための条件を調べたり,参加を申し込んだり,脱退するためのプロトコル
パイプ・バインディング・プロトコル パイプを作成,オープン,クローズ,削除したり,パイプにデータを送受信するためのプロトコル。パイプは仮想的な名前付きのメッセージ・キュー
エンドポイント・ルーティング・プロトコル ピアのエンドポイント(TCP のポートのような もの)にアクセスするためのゲートウエイを調べるためのプロトコル。携帯電話のように,IP でリーチできないピアにアクセスする場合などに使う
表1 6種類のJXTAプロトコル

ディレクトリなど不十分な点も

 もっとも現在のJXTAだけでPtoPアプリケーションを開発するには,不十分な点がある。1つはセキュリティ機能が十分でないこと。例えば現行バージョンでは,ピア・グループ内のデータをピアごとにアクセス制御できない。

 もう1つは,リソースを検索するためのディレクトリの仕組みが不十分なことである。

 PtoPの魅力の1つは,インターネット上にある無数のコンピュータが持つコンテンツやサービスを利用しあえること。しかし,それを実現するには,強力なディレクトリ機能が必要である。例えば,DNS(ドメイン名システム)のように,地域ごとにディレクトリを分散させて,各ディレクトリ間で情報を同期させるといった仕組みが必要になるだろう。一方,現在のJXTAバージョン1は,ブロードキャスト通信による検索機能と,「ランデブ・ピア」と呼ぶ集中型のディレクトリにアクセスする機能しか提供していない。

NTTが分散ディレクトリを製品化

 こうした分散型のディレクトリを効率的に実装したPtoPソフトがある。NTTが4月27日に発表した製品「SIONet」である。SIONetは,JXTAのピアやピア・グループ,パイプとほぼ同等の機能を備えている。

 SIONetでは,サービスやコンテンツなどのリソースに意味情報を付加し,この意味情報を基に効率的な検索を可能にしている。例えばユーザーが,ピア上の音楽ファイルに,「ジャンル」がピアノ曲で「価格」が2000円という意味情報を付加したとする。そのピアは,隣接するピアに対して「ジャンル」と「価格」に関して意味付けられたリソースを持つことを通知する。この情報を受け取ったピアは,さらに隣接するピアに同じ情報を伝達していく。こうしてピア・グループ内のすべてのピアは,特定の意味付けを持つリソースが,隣接するどのピアの先にあるかをデータベースとして持つようになる。

 こうした状態で,あるピアが「ジャンル」がピアノ曲で「価格」が1500円以下の音楽ファイルを検索したとする。この検索要求は,「ジャンル」と「価格」という2つの意味付けを持ったリソースに対してだけ伝達されていく。こうして無駄な検索要求が流れないようにしている。ちなみにGnutellaの場合,こうした検索要求は,隣接するピアにすべてブロードキャストされるため,大きなトラフィックが発生してしまう。

 NTTは「SIONetをJXTA対応にすることも選択肢の1つ」としている。