ASCII24 Business Center

コラム / Sun View 第8回

World Wide Webに続くもの


渡邉 利和(toshi-w@tt.rim.or.jp) [著]
2001年5月29日

Introduction

どうやらIT業界ではWebは古い技術と見なされるようになったようで、「Webサービス」や「P2P」など、“Webの次”と評される技術がいろいろと発表されている。Sunも、フライング気味に公開されたJXTAを正式にオープンソースプロジェクトとして発足させた。

Bill Joyが主導したP2Pプロジェクトとして一躍有名になったJXTAは、名前が出た時点では公式には未発表の研究プロジェクトだった。このJXTAは、先月正式にSunから発表され、オープンソースプロジェクトとして一般参加を前提とした活動を開始した。

これまでも、JavaやJini、そしてSolarisでもソースコードの公開が順次行なわれてきていたが、Sunのこうした動きが「オープンソース」とは呼ばれず、「ソースコードの公開」とされてきたのはそのライセンス条項に理由があると見てよいだろう。「ブランドを守り、互換性を維持する」という理由だと思われるのだが、JavaやJiniのソースコードを見ることはできるが勝手な改変ができないようになっていたりする。つまり、「見てもよいが触ってはいけない」と言われているようなものであった(厳密には、何もできないわけではないのだが)。しかし、JXTAはまるっきり新規のプロジェクトだからだろうか、JXTAのソースライセンスは従来のSunのやり方とは異なり、完全な「オープンソース流」のものになっている。Apacheのライセンスをほぼそのまま踏襲したのだ。このことから、JXTAを“Sunから生まれた初の「オープンソース」プロジェクト”と表現してもよいかもしれない。


渡邉 利和(toshi-w@tt.rim.or.jp) [著]

JXTAとは何か

Sunのページ
Project JXTA
さて、新しく開設されたJXTAのWebサイト(http://www.jxta.org/ )には、すでに動作可能なソフトウェアが公開されている(本稿執筆時点では21 May 2001版)。ただし、これはβとかいうものでもなく、ある意味では「コンセプトモデル」的な存在である。なにしろJXTAはプロジェクトとして公式に開始されたばかりであり、これからみんなで開発しましょう、という段階なのである。従って、このソフトウェアはJXTAプロジェクトが“何を作ろうとしてるのか”を具体的に分かりやすく見せるためのサンプルのようなものだと考えてよい。ただし、基本的な骨格はすでに組み上がっていると見てよさそうだが。

JXTAは「SunのP2Pプロジェクト」と簡単に表現されるが、実体として何なのか、どうにもイメージが掴めなかった。個人的には「JiniがあればJXTAは不要ではないか?」と考えていたこともあり、単に流行に乗ってみただけなのか? という疑問さえ持っていたのである。そこで、今回は公開されたJXTAのソフトウェアをちょっと触ってみた。

簡単に言ってしまうと、JXTAは「P2Pアプリケーションを作成するために用意された標準プロトコル群」である。JXTA単体で何か役に立つ処理ができるというものではない。確かに、JXTAをベースとすればNapstarやGnutellaのようなファイル交換アプリケーションは簡単に実装できそうであり、その点でなるほどと思うところはあるものの、JXTAが提供する機能はあまりに基本的なサービスであるため、ちょっと拍子抜けしてしまうような印象もある。



渡邉 利和(toshi-w@tt.rim.or.jp) [著]

JXTAの基本的な構造

White Paperから、JXTAの構造を示した図を紹介しよう(図1)。

JXTAの構造
図1

最下部に位置するのはいわゆるプラットフォームの部分で、ハードウェアやOS、ネットワークプロトコルなどだ。SolarisやWindowsといったOSから下の部分だと言ってもよいだろう。この上に、JXTAの基本構造が大きく2層に分かれて積み上げられる。基本となるのがJXTA Coreで、P2Pシステムに必須となる基本機能を実現する。そして、その上にJXTA Services層がより上位のサービスを提供するために実装される。この関係は、X Window Systemで言うところのxlibとツールキット/ウィジェットセットの関係に似ていると表現できるかもしれない。最上位に位置するのがJXTA Applications層だが、これは下2層の機能を利用して実装されるユーザーアプリケーションであり、いわゆるシステムには含まれない。

JXTAは、アプリケーションを実現するための土台を提供するものだ。一般にP2Pというと、即座にGnutellaやNapstarのような具体的なアプリケーションを思い浮かべてしまうが、これらはP2Pアプリケーションである。GnutellaやNapstarが代表的な存在とイメージされてしまうと、「P2Pとは、サーバなしでファイル交換を行なうシステムである」と短絡してしまいそうになるが、これはもちろん正しくない。ファイル交換は1つの応用例に過ぎないのである。

では、P2Pとは結局のところ何なのだろうか? 筆者は以前JXTAについて「P2Pアプリケーションのポイントは『ダイナミックな情報検索手段の実装』といえる」 と書いたことがあるが、公開されたJXTAの資料を見る限り、これはそう的外れではないようだ。JXTAでは、基本となるのはpeer間で公開情報をやりとりしてサービスやリソースを見つけだし、それを実際に交換する、という機能が中心になっている。この“リソース”がファイルであれば、ファイル交換アプリケーションとなるわけだし、CPUパワーそのものであれば、SETI@Homeのような分散処理アプリケーションとなる。

JXTAが提供する基本的な機能は、peer間での情報交換である。これには、peerを見つけだすこと、peerをグルーピングしてセキュリティポリシーを適用できるようにすること、peer間で交換する情報の標準フォーマットを定義すること、peer間での情報交換のための通信インターフェイスを確定すること、といった感じである。逆に言うと、JXTAではこれしか実現されない、という言い方も可能であろう。ただし、実際にはこれだけあれば相当いろいろなアプリケーションが作れそうなのだが、アプリケーションの可能性については実際のデモを見ながら改めて触れることにしたい。

JXTAでは、標準データフォーマットとしてXMLを利用している。ただし、XMLに依存しているというわけではない。また、現在のJXTAのデモコードはJavaで実装されているが、プログラミング言語としてJavaが必須というわけでもない。このあたりは、TCP/IPとよく似ている。今どきTCP/IPはどんなOSでも実装されているし、さまざまな言語が使われているはずだ。JXTAも同様に、エンタープライズサーバからPC、PDAや携帯電話など、さまざまな環境で利用されることを想定しているので、特定の環境に依存するような仕様は含まれていない。

さて、JXTAの基本要素として筆者がポイントと考えたのが、AdvertisementとCodatである。実は、どちらも実体として同じものと考えることもできそうだが、一応分けておこう。Advertisement(どう訳してよいかよく分からない。意味を汲んで意訳すると“公開情報”という感じだろうか)は、peerが外部に発信する情報である。ここには、自分が提供するリソースの種類やアクセスの際のセキュリティに関する情報などが含まれる。逆に、ほかのpeerにあるリソースを探す場合も、ここに探したいリソースの手がかりを記述する。実体としてはXMLデータである。JXTA環境では、peerはAdvertisementを発信/受信することでほかのpeerの情報を取得する。一方、CodatはCODE+DATAの意味の造語だそうである。これも実装上はXMLデータという形であるが、ここには、各種のプロパティ値(Advertisementの場合は、これが主となる)、テキスト、バイナリデータ、実行可能コードなど、ありとあらゆるものが格納できる。そして、JXTAでpeer間で交換されるのはこのCodatである。つまり、ごく単純化してしまうと、JXTAとは、Advertisementを交換することで目的のCodatを持つpeerを探し、そのCodatを入手するためのメカニズムである、とも表現できそうだ。

通信インターフェイスとしては、「パイプ」が用意される。UNIXのシェルで利用されるパイプ(“|”)と同様で、プログラムとプログラムを接続する働きをする。発想としては、UNIXのパイプをpeer間に拡張したもの、と言える。ただし、インターネットのような環境を前提としているため、JXTAのパイプは非同期で、信頼性が低く、片方向通信をサポートする通信路、と想定されている。筆者の印象としては、使われ方を見る限りこれはパイプというよりは通信バッファという感じだ。peer間の通信にパイプを利用する場合、発信側のpeerの出力パイプにCodatを送り、この出力パイプを受信側peerの入力パイプに接続(Bind)する。受信側peerでは入力パイプをプログラムで読み出せばCodatを受け取れるわけだ。ただし、UNIXのパイプとは違い、データ転送が終了したら即座に破棄されるわけではない。実際には、一度接続したパイプを切断し、再度別のpeerに接続して同じデータを複数のpeerに配布するようなこともできるようだ。この点で、データを一時格納しておくバッファに近い動作をする。

さて、これですでにある代表的なP2Pアプリケーションを実現するための基本的なメカニズムはできあがっている。AdvertisementとしてローカルにあるMP3ファイルの局名やアーティスト名などを含むリストを交換しあい、欲しい曲のMP3データをCodatに格納して送ってもらうようなアプリケーションを作成すれば、Napstarと同様の仕掛けがすぐにできあがる。また、Codatに分析のためのコードと分析したいデータを格納して多数のpeerに配布し、分析結果を送り返してもらうようにすればSETI@Homeのような仕掛けも実現できる。

P2Pはネットワークの1つのモデルであり、アプリケーションではない。従って、P2PのためのフレームワークであるJXTAは、一見なんと言うこともない地味な機能を実装することになる。P2Pは、現在のWebとサーチエンジンの組み合わせではカバーできない領域を対象とした、リソース発見のためのモデルだといえるが、筆者には画期的なアイデアとは思えない。ただ、補完的に利用できれば便利だろうと思うのは間違いない。とはいえ、JXTAを見れば、思い浮かぶP2Pアプリケーションの多くが比較的簡単に実装できそうな気がしてくるのは確かで、この点でJXTAはけっこう価値が高いものかもしれない、とも思う。


渡邉 利和(toshi-w@tt.rim.or.jp) [著]

JXTAのデモを眺めてみる

では、実際にJXTAを動かしてみよう。JXTAはプロトコルでありフレームワークでもあるが、これだけでは実際には何ともしようがない。WebからダウンロードできるJXTAのパッケージはその点ぬかりなく、ちゃんとサンプルアプリケーションが付属しているので、ここではこのサンプルアプリケーションを中心に紹介しよう。

パッケージは、5種類のプラットフォームに対応したものが用意されている。Windows、Solaris、Linux、UNIX、Other Java-enabled Platformsの5種類だ。もちろんソースコードも公開されている。今回は、Solaris 8(SPARCシステム)とWindows(98 Second Edition)がそれぞれ動作する2台のマシンにJXTAをインストールし、相互に通信を試みた。

インストール自体はごく簡単で、しかもSolarisでもWindowsでも同じである。インストールが終了すると、サンプルアプリケーションが実行できる。サンプルとして用意されているのは、“JXTA Shell”と“Instant P2P”の2種類だ。

JXTA Shellは、JXTA環境のためのコマンドラインユーザーインターフェイスである。

JXTA Shell
JXTAShellを起動したところ。一番下に見える“JXTA>”がプロンプトだ。ここでコマンドをタイプして実行する。利用感はUNIX系OSのシェルそのものである

ここからJXTA対応のアプリケーション/コマンドを起動することもできるし、環境の設定やCodat/Advertizementの作成といった「システム管理」的な作業もできる。ここでコマンドラインから操作することで基本的なP2Pアプリケーションの動作をまねることができるが、正直言ってかなりたいへんだ。ちゃんとした処理はやはり専用に作成したアプリケーションに任せるべきだという印象を強く受ける。

簡単なコマンドを実行してみよう。“peer”コマンドを実行すると、その時点でこのpeerが認識しているpeerの一覧が表示される。ただし、最初はほかのpeerの検索等を実行していないので、自分自身しか見つからない。次に、“peer -r”と“-r”オプションをつけて実行すると、ほかのpeerの検索メッセージを発信する。次に再度“peer”と実行すると、検索の結果見つかったpeerが一覧表示される、はずなのだが、実はちょっと時間がかかった。しかも、筆者の想定とは異なり、同じプライベートネットワーク内に用意したWindows peer(「Win98」という名前)のほかに、インターネット上のJXTA peerがけっこうな数見つかってしまった。

インターネット上のJXTA peer
peersコマンドを使ってほかのpeerを検索してみた。想定では“Win98”を見つけて終わるはずだったのだが、それ以外にもけっこうな数のpeerを発見したようだ。Webサーバと異なり、これが「現在ユーザーがログオンしており、JXTAを実行しているpeerだ」という認識があるためか、無人の荒野に人影を見たかのような嬉しさを感じてしまう点が面白いところだ

この実験はNATを使ったファイアウォール内部にある2台のマシンを利用して行なっているため、本来ならインターネット上のpeerの存在は認識できないはずだが、JXTAではNATへの対応も考慮されているため、これがちゃんと見える辺りが面白い。ちなみに、これはインターネット上に「情報中継ホスト」を置くことで実現している。

このほか、組み込みコマンドのようなイメージでTALKコマンドなども用意されており、ほかのpeerと簡単なテキストメッセージを交換することができるし、

JXTAでテキストメッセージ交換
こちらは、Windowsマシン側でJXTAShellを立ち上げ、talkコマンドの受け入れ準備をして待っていたところ、Solarisマシン(peer名はSparcSol、ユーザー名はsparcsolUserとした)からテキストチャットメッセージが届いた。シェル上でユーザー名を登録し、ログイン(talk -login)を実行してようやく受信準備が整うわけで、ちょっと使いにくい。もちろん、このとき「ユーザー名win98Userであるユーザーがpeer名Win98であるマシン上でtalkコマンドの受け入れ準備をして待っています」という情報を格納したAdvertizementが作成され、それがネットワークに発信されたのだろう。このシェルをいじるだけでもJXTAがどのような処理をするかイメージできるようになってくる

テキストファイルなどをCodat化し、これをほかのpeerに送付することで簡単なファイル転送が実現できたりする。ちょっと使いにくい気もするが、JXTAが提供する機能の触りはこのshellだけでけっこう体験できるようになっている。

次に、InstantP2Pだが、こちらはウィンドウアプリケーションで簡単なアプリケーション機能が実装されている。こちらのほうが、一般的には“デモアプリケーション”らしく見えるだろう。

InstantP2P
InstantP2PをSolaris上で実行したところ。上左側には検索の結果発見されたPeer Groupが一覧表示されている。右にあるのは、デフォルトのグループであるNetPeerGroupのメンバーの一覧である。筆者が設定したマシンは特にGroupの設定をしていないため、このNetPeerGroupのメンバーとなっている。ここでLAN内のWindowsクライアントを選択し、下のアプリケーションタブで「Chat」を選ぶと、テキストチャットが実行できる。下部の「Send Message」フィールドにテキストをタイプし、リターンキーを打つと、中程のシェル風のペインにそのテキストが移動され、同時に相手のpeerに送られるわけだ

ここでは、同様にほかのpeerを検索し、見つかった中からもう1台の実験マシンに対してテキストチャットを実行したところだ。InstantP2PをWindows側で実行してみても、ほぼ同じイメージに見える。

Windowsで実行したInstantP2P
同様にテキストチャットをWindowsクライアント側から実行してみたところ。見えているクライアントの数が違うのは、JXTAを起動してからの経過時間がSolarisマシンとWindowsマシンとでは異なっているため。当然、長い間起動しておけばそれだけたくさんのメッセージを受信し、多数のpeerを発見することになる

JXTAのデモパッケージは、インストール用のJava VMを同梱したもので3.4MB(Windows用)〜8.5MB(Linux用)、Java VMなしなら1.2MB程度のサイズなので、ぜひ試してみていただきたい。少なくとも、JXTAプロジェクトが考えるP2Pシステムとはどのようなものなのか、という点については、実際に試してみることでよく理解できるようになるものと思う。

渡邉利和




[通常ページに戻る]
ASCII24 http://ascii24.com/
Copyright (C)1999-2007 ASCII Corporation. All rights reserved.