レベル: 初級 Todd Sundsted, Principal architect, Gig.com
2001年 3月 01日 ピアツーピア (P2P) コンピューティングは、力強いパラダイムを約束します。そこに内包されている理念は数多くの魅力的な分散コンピューティング・テクノロジーに活躍の場を与えることでしょう。P2Pテクノロジーの理解を深めるために、Todd Sundsted氏は、このシリーズを1980年代初期から始めます。この時期は、最初の一般向けP2Pアプリケーションが出現した時です。氏は、P2Pコンピューティングが、広範な分散コンピューティングの世界において、どのような位置を占めるのかについて説明します。最後に、非常に単純なピアを紹介し、これから実現されるものを予示するとともに、欠陥を指摘します。これらの情報を手にすることによって、Javaプログラミング言語でP2Pアプリケーションを作成したり、特定の手法をご自身のプログラミングの場に持ち込むことができるでしょう。
過去9か月間車のハンドルを握ったまま眠っていたのでなければ、ピアツーピア (すなわちP2P) コンピューティングについて聞いたことがあるでしょう。P2Pの用途は、ファイル共有に限られているとお思いでしょうか?または、P2Pはコンピューティングの歴史上、インターネットの発明以降の最も重要な開発であるとお思いでしょうか?どちらにしても、あなたの責任ではありません。責めを負うべきは、一部の極端な支持者たちが作り出した誇大宣伝なのです。
誇大宣伝にかかわらず、P2Pコンピューティングは実際に重要であり、重要な考え方を含んだパラダイムとしての様相を呈し始めています。このパラダイムは、将来性のある数多くのテクノロジーに脚光を浴びさせるだけの力を秘めています。それ故、P2Pコンピューティングは、より広範なテクノロジーの世界においてどのような位置付けになるのかを理解することが重要です。また、学習や仕事の対象となるP2Pコードの実際例を知ることも重要です。そのため、Javaプログラミング言語で書かれたコードを示すつもりです。
この連載を通して、P2Pの世界について考察して行きたいと思っています。末節的な議論に陥らないため (これが多い)、考察の内容を以下に限定します。
- 世に行き渡っているP2Pアプリケーションの性質と用途から、P2Pテクノロジーの議論は、残念ながら合法性、自由度、プライバシー、管理、著作権などの問題に終始しがちです。このような質問はどれも興味深いものですが、ピアツーピア・テクノロジーに関する議論を必ずしも促進するものではありません。したがって、これらの問題で、特定のアプリケーション要件に関わってくるものがない限り、これらに関する議論は一切しません。
- P2Pアプリケーションを設計/開発しているエンジニアが直面している問題は、興味を引くものですが、必ずしも新しい問題とは言えません。したがって、このような問題に対処する際は、必要に応じてコンピューター・サイエンスの他分野を力を借りるつもりです。
要するに、このコラムではテクノロジーに焦点を絞ると考えてください。具体的には、コンテンツおよびリソース管理、トラスティとセキュリティー、所有権と権利、通信モデル、分散処理、検索とクエリーなどについてです。現在のP2Pアプリケーションを取り巻いている社会的、政治的、および法的な問題は、ほとんど取り上げません。
P2P小史
ピアツーピア・コンピューティングは、現在の形で突然現れた訳ではありませんでした。むしろ、数多くのテクノロジーの影響を受け今日の姿になったという方が当たっていると言えましょう。大きな影響を与えた2つのテクノロジーについて見ていきましょう。
まず、最も重要な点として、P2Pコンピューティングは、分散処理の流れの自然な帰結でした。この流れは、出現したテクノロジーの影響を受けたソフトウェア・エンジニアリングで発生したものです。
エンジニアリングの観点からすると、過去10年間の流れは、巨大な単一システムから分散システムへの移り変わりでした。そして、この流れは、エンタープライズ・アプリケーションの統合などによって促進されました。この傾向は、集中型アプリケーションの管理が容易であるという点からいくぶん抑制されましたが、インターネットの成長、それに続くB2B取引の重要性の増加により、全面規模の分散コンピューティングがビジネスに必要不可欠となりました。
この流れに加え、ネットワークで接続された強力なコンピューターと安価な帯域幅が利用可能になったことが、一層変化を促しました。P2Pコンピューティングには、その効果を高めるために、数多くの相互接続されたピアの存在が不可欠です。
このような2つの流れが組み合わされて、P2Pアプリケーション研究者にの申し分のない活躍の場が提供されました。
技術以外の社会的問題も重要でした。P2Pコンピューティングが、現在このように関心を集めているのは、Napster、Scour、Gnutellaなどの製品に対する人気の結果です。これらの製品により、膨大な数のエンド・ユーザーに対し、P2Pテクノロジーの一部の機能を提供する「キラー・アプリケーション」が提供されました。これらの製品を実際に使って行く中で、P2Pパラダイムの秘めた能力が機能への関心が高まっていきました。
ただし、ここで指摘しておかなければならないことがあります。P2Pの先駆けとなったアプリケーションは、20年ほど前に出現し、その多くは現在も存在しています。しかしながら、これらのアプリケーションが、P2Pテクノロジーの中核を具現しているにも関わらず、ユーザーがこのことに気がつかないため、この面について正しく認識されないことがしばしばです。
初期の試み
P2Pコンピューティングはそれほど新しいものではありません。P2P という用語自体は、もちろん新しく作られたものですが、P2Pが意味している基本的なテクノロジーは、少なくともUSENETやFidoNet (両方とも成功した完全なピアの分散ネットワーク) と同じくらい前から存在していました。いや、P2Pコンピューティングは、これよりさらに古いかもしれません (ここに、読者の皆さんに最初のP2Pアプリケーションを見つけ出すという課題を出します。もしそれがまだ使用されていたら、特別ポイントを差し上げます) が、USENETとFidoNetの2つの例があればその古さを示すには十分でしょう。重要なのは、今日P2Pアプリケーションを使用しているユーザーの多くは最初のP2Pアプリケーションが出現したときにはコンピューターすら使用していなかったということです。
USENETは1979年に誕生した分散アプリケーションで、世界のほとんどの地域にニュースグループ (私のお気に入りはrec.arts.int-fiction とrec.games.int-fiction ) を提供しています。その最初のものは、Tom Truscott氏とJim Ellis氏という2人の大学院生によって作成されました。当時は、今日の私たちが知っている「オンデマンド」のインターネットのようなものは存在していませんでした。ファイルは、多くの場合電話料金の最も安い夜間に、電話回線を利用して一括でやりとりされていました。したがって、USENETの機能を集中化する効果的な方法もありませんでした。当然の結果として、極端に分散化されたアプリケーションになり、今日までその構造が維持されています。
もう1つの優れた 初期のP2PにFidoNetがあります。FidoNetはUSENETと同様に、メッセージ交換用の分散アプリケーションです。FidoNetは、1984年Tom Jennings氏によって、異なるBBSシステムを使用するユーザー間でメッセージを交換する方法として作成されました。これはユーザーのニーズを満たしたため、またたく間に成長し、USENETと同様に今日も使用されています。
USENETとFidoNetは両方とも興味深いものです。それは、どちらも何年も前に今日のP2Pアプリケーションが遭遇している問題の多くにぶつかりながらも、それを克服し今日に至っているからです。スケーラビリティーが一番の問題でしたが、セキュリティーやほかの多くの問題にも対処しています。P2Pコンピューティングを成功させるには、その支持者が進んで歴史から学習することが必要です。
テクノロジー上の特徴
これまでP2Pの起源について見てきました。ここでは、分類とクラス分けをやってみましょう。
ほとんどすべての人は、P2Pコンピューティングは、分散コンピューティングのサブセットであることに同意するでしょう。また、彼らは、分散コンピューティングが、すべてピアツーピア・コンピューティングではないことにも同意することでしょう。「ピアツーピア」という名前は、ピア間の対等な関係を示しており、さらに重要なこととして、ピア間の直接の対話を示しています。
P2Pアプリケーションは、数多くのピアから構成されており、P2Pネットワークでそれぞれが相互に通信しあって特定の役割を実行しています。通常、ピアの数は多く、役割の数は少なくなっています。この2つの要因から、多くのP2Pアプリケーションは、機能面から見ると大規模な並列処理であるとされる理由がわかるでしょう。多くのユーザーにとって最もわかりやすい例は、Gnutellaネットワークです。これは、膨大な数の基本的に同じピアで構成されます。P2Pアプリケーションでは、関心の対象となる問題は、ピア間の対話に存在し、ピア自体に存在する程度はそれより少なくなります。
P2Pコンピューティングで解決すべき問題は、分散コンピューティングで直面する問題と大部分が重なります。それは、独立したノードのアクティビティーを調整およびモニターして、ノード間の頑強で信頼性の高い通信を確保するという問題です。ただし、分散コンピューティングのすべてがP2Pコンピューティングであるわけではありません。SETI@homeやさまざまなdistributed.net プロジェクトのような分散アプリケーションには、関心の対象となるようなピアツーピアの対話がほとんどありません。したがって、上記の定義からすると真のP2Pとは言えません。ただし、問題点に重複する部分があるため、分散コンピューティングの機能について学習する価値はあります。後のコラムで見ていきましょう。ちなみに、真のピアツーピア・アプリケーションではない分散アプリケーションに名前が必要ならば、ピア指向というのはいかがでしょうか。
世界一単純なピア (およびその問題点)
Java言語を使って初歩的なP2Pアプリケーションを作成することは、非常に簡単です。そこで、実際に操作することができるアプリケーションを1つお届けしましょう。理解を深めていただくために、このアプリケーションを提供します。ネットワーク内でファイルやメッセージを送受信することは簡単です。難しいのは、P2Pコンピューティングに必要な頑強なプラットフォームを作成することです。私のP2Pアプリケーションには、重要な機能が欠けています。これらの欠けている機能の中には、今日利用できるほとんどの汎用P2Pアプリケーションにも欠けているものもあります (たとえばセキュリティー)。また中には、私のP2Pアプリケーションでは欠けているが、いくつかのアプリケーションでは利用できる機能もあります (メッセージ・ルーティング、分散クエリー)。たとえば、Gnutellaは、単純なメッセージ・ルーティングと単純な分散クエリーの両方をサポートします。
図1は、私のP2Pアプリケーションの基本設計を示しています。範囲をファイル共有に限定したくなかったため、このP2Pアプリケーションは、Resource インターフェースによって表現される抽象リソースとの対話を管理します。リソースは、アドレス指定可能であれば、ファイルシステム、データベース、ディレクトリー、電話帳など、何でもかまいません。
図1. 設計の概略
MessageServer クラスは、アプリケーションの中核です。このクラスは、ほかのピアからの接続を受け入れ、そのメッセージを適切なリソースに送ります。
クラス・ファイルは、p2p.jar に保存されます (このファイルをダウンロードするには参考文献 を参照)。java -jar p2p.jar と入力して、コマンド・ラインからアプリケーションを起動します。
アプリケーションは、アプリケーションを起動したディレクトリー内でp2p.properties という名前のプロパティー・ファイルを検索します。プロパティー・ファイルは、ロードするリソースと、アプリケーションが認識しているピアを定義します。jarファイルには、編集するのに都合のよいプロパティー・ファイルのサンプルが入っています。
図2に示すように、ユーザーは単純なコマンドライン・インターフェースを使ってアプリケーションと対話します。画面には、選択されたピア (1つが選択されている場合) とアクセス中のリモート・リソース (1つがアクセス中の場合) が表示されます。
図2. 初期画面とプロンプト
図3に示すように、ユーザーは、いつでも、疑問符 (?) を入力してオプションのリストを取得できます。ユーザーがピアを選択しなかった場合は、このアクションにより、既知のピアのリストが表示されます。ピアを選択していれば、そのピアで利用できるリソースのリストが表示されます。ピアとリソースは、その名前を入力することによって選択できます。
図3. ピアとリソースの表示
図3では、ユーザーは "guppy" という名前のピアを選択して、guppyで利用できるリソースを表示しました。図4に示すように、ユーザーは、ピアとリソースを選択した後、そのリソースが管理するオブジェクトを参照してそれにアクセスすることができます。たとえば、ファイルシステム・リソースの場合、オブジェクトにアクセスすると、そのオブジェクトはリモート・ピアからローカル・ピアにコピーされます。
図4. 管理対象オブジェクトの表示
ユーザーは、いつでも、ダブル・ピリオド (..) を入力してリソースまたはピアの選択を解除できます。.
図5. ナビゲート
まとめ
実際に使用するP2Pアプリケーションには、私の単純なアプリケーションが提供するものより、さらに多くの機能が必要です。私のアプリケーションが完全に機能するには、少なくとも次の要素が必要です。それは、認証と権限付与の機能を含む適切なセキュリティー、信頼できるメッセージ・ルーティングとメッセージ配信、コンテンツおよびリソース管理、分散クエリー、名前付けなどです。これらの要件については、今後のコラムでさらに詳しくお話しします。いつものように、実例と機能コードを使って説明するつもりです。次回は、セキュリティーから始めましょう。
参考文献
著者について  | |  | Todd Sundsted氏は、コンピューターがデスクトップ上で利用できるようになったころから、プログラムを作成し続けてきました。Todd氏は、元々C++ を使って分散アプリケーションを作成することに関心がありましたが、Javaプログラミング言語がプログラミング言語として採用されることが多くなったのをきっかけに、Javaプログラミング言語の方に進みました。プログラム作成者であるだけでなく、PointFire, Inc. の共同設立者兼チーフ・アーキテクトでもあります。氏の連絡先は、todd-p2p@etcee.com です。
|
記事の評価
|