本文へジャンプ

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

  • 閉じる [x]

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む


送信されたすべての情報は安全です。

  • 閉じる [x]

XML ウォッチ: BEEPの概観

IETFのプロトコル規格Blocks Extensible Exchange Protocolの紹介: 第1回

Edd Dumbill (edd@xml.com), Editor and publisher, xmlhack.com
Edd Dumbill氏はXML.com の編集長であり、XMLデベロッパーのためのニュース・サイトXMLhack の編集者兼発行者でもあります。Programming Web Services with XML-RPC (O'Reilly) の著者の1人であり、生命科学の知的財産を交換するPharmalicensing の共同設立者兼アドバイザーです。EddはXML Europe コンファレンスのプログラム司会者でもあります。

概要: アプリケーションに接続する便利な方法としてHTTPを再利用すべきかどうか、議論が続いています。その一方で、BEEP -- Blocks Extensible Exchange Protocol -- という新しいプロトコルが、Internet Engineering Task Force (インターネット特別技術調査委員会、IETF) によって標準化されました。XMLそのものを利用しているBEEPは、ちょうどXMLが文書やデータに対して行うのと同様の機能を備えています。XMLの経験豊かな筆者Edd Dumbillが初めてdeveloperWorksのために書いたこの記事では、BEEPのフレームワークを使用すれば、開発者が通信チャネルの詳細に時間を浪費することなく、自分のアプリケーションの重要な点に焦点を絞れることを示します。

このシリーズの他の記事を見る

日付:  2001年 12月 01日
レベル:  初級 この記事の原文:  英語
アクティビティー: 2066 ビュー
お気軽にご意見・ご感想をお寄せください: 


XMLベースの新しいテクノロジーがいかに実用的であるかを論じる連載の第1回の記事にようこそ。この連載では、あるXMLテクノロジーを紹介し、それを実用的なシステムに配置しようとする試みを示します。配置に関するレポートとともに、ちょっとしたユーモアも含めるつもりです。読者が豊富な予備知識を持っていることは想定していませんが、XMLやHTTPといったWebの標準的な基礎知識があれば理解しやすいでしょう。

BEEPとは何か

ビギナーのために、最初のいくつかの記事では、Webサービスという鍋物の中にふんだんに盛り込まれている略語という食材の1つ、BEEPについてご紹介します。今回の記事の目的は、BEEPプロトコル・フレームワークについて紹介し、どんな分野にこれを適切に使用できるかを示唆することです。

BEEPはBlocks Extensible Exchange Protocol (ブロック拡張可能交換プロトコル) の略ですが、単にBEEP と言ってもほとんど意味は変わりませんし、その方がブザーのようでおもしろく聞こえます。しかし、XMLユーザーにとってはExtensible (拡張可能) という言葉が気に掛かるでしょう。実際、BEEPの価値を高めているのはこの拡張性です。詳しくは後で述べるとして、まずはBEEPがどんな問題を解決してくれるか見てみましょう。

あなたがネットワーク・アプリケーションを書いているとしましょう。プログラムのインスタンスにTCP/IPを介して通信させるとします。ここで、アプリケーションの論理そのものに取りかかる前に、プログラムがどのように接続し、相互に認証し、メッセージを送受信し、エラーを報告するかを考えなければなりません。こうしたことに費やす累積時間は、アプリケーション論理そのものに費やす時間より多いかもしれません。一言で言うと、BEEPはこの問題を解決してくれます。BEEPは新しいネットワーク・プロトコルの作成環境を改善するいわば「衛生要因」を実装しますから、開発者がこうしたことを心配する必要はありません。

ここで読者は、CORBA/IIOP、SOAP、XML-RPCなどがあるのに、なぜ分散コンピューティング・プロトコルがもう1つ必要なのかと疑問に思うかもしれません (それも無理はありません)。その答えは、BEEPがそれらとは異なるレベルにあるからです。BEEPはフレームワークです。BEEPの上にSOAPを首尾よく実装することができます。BEEPはメッセージのTCP/IPレベルでの接続、認証、パッケージ化を担当しますが、SOAPはこれらを意図的に避けています。BEEPは実際にHTTPと同じレベルで競い合います。


再利用とリファクター

最近のアプリケーション・プロトコルの設計者たちはHTTPに注目し、その便利さを実感してきました。確かにHTTPはかなり便利です。Windowsの「ネット・フォルダー」機能の基礎となっているプロトコルWebDAVでも、分散オーサリングを可能にするためのverbをいくつかHTTPに追加しました。Internet Printing Protocolでは、HTTP/1.1の機能を利用するためのHTTPヘッダーがいくつか発明されましたし、SOAPをHTTPにバインドしても同様の機能が得られます (HTTPのこれら3つの使用形態については、参考文献を参照してください)。

おおまかに言って、これらは適切な動きです。どこにでもある普及したHTTPプロトコルが、効果的に再利用されているのです。しかし残念な結果もいくつか見られています。第1に、ポート80の過負荷です。Webページ要求だけでなく、セキュリティーを重視するビジネス要求までもが今や80ポートを通して送られていますから、より一層の注意が必要になりました。ポート80に影響を与える、Webキャッシュその他のデバイスとの頻繁な対話を考慮に入れる必要が出てきました。これらの問題は別の個所で詳しく扱われていますから (参考文献を参照)、この記事では詳細に述べません。

HTTP再利用の第2の結果は、HTTPの対話モデルに拘束されることです。HTTPはステートレスで要求 / 応答指向のプロトコルです。応答を伴わない要求は存在せず、要求を伴わない応答もありません。さらに、複数の要求の間で状態が保持されません。残念ながら、いくつもの対話方式においてこれは不便です。非同期、ステートフルな対話、ピアツーピア通信などを排除してしまうからです。こうした問題はHTTPの上に層を築くことで回避可能であり、実際にそうされてきましたが、このような解決策は使いにくいものとなっています。

経験豊富なプログラマーであれば、ここでリファクター すること、つまりシステムの責任を適切なレベルに設定し、共通の機能を抽象化することを提案するでしょう。BEEPはまさにそれを行います。最近のインターネット・アプリケーション・プロトコルに共通する要件をサポートするために、過負荷状態のHTTPをリファクターします。


何ができるか

前置きはもう十分でしょう。BEEPにはどんな機能があるか、どんなふうに利用できるのかを検討します。

BEEP仕様の作成者Marshall Rose氏によると (参考文献を参照)、BEEPがターゲットとする「市場」は以下のようなアプリケーションです。

  • 接続指向: BEEPを使ってデータを受け渡しするアプリケーションは、接続し、ビジネス取引を行い、そして切断します。このため通信は順序を持ち、信頼性が高く、輻輳 (ふくそう) をきめ細かに扱うという特性を持ちます。(IPレベルで並列化することにより、多くの点でUDPよりもむしろTCPと同じ特性を持ちます。)
  • メッセージ指向: BEEPを使ってデータを受け渡しするアプリケーションは、構造化データの定義済みバンドルを使って通信します。つまり、相互に通信している複数のアプリケーションは疎結合され、互いのインターフェースについて詳細に知っている必要がありません。
  • 非同期: HTTPとは異なり、BEEPは要求と応答の特定の順序付けに制限されません。非同期によってピアツーピア形式の通信が可能になりますが、従来のクライアント / サーバー通信を排除するわけでもありません。

これらの特性は潜在的にかなり広範囲のアプリケーションを包含します (たとえばHTTP、FTP、SMTP、およびさまざまなインスタンス・メッセージング・プロトコルの再実装が可能です)。その一方で、BEEPの有効範囲に入らないアプリケーションも数多くあります。この範疇に属するのは、DNSルックアップのような単発的な交換です (DNSルックアップの場合、BEEP導入のコストは得られる利益と釣り合いません)。または、NFSのような密結合のRPCプロトコルもこれに該当します。

アプリケーションがこの「ターゲット市場」に当てはまる場合、BEEPはどんな機能を提供するのでしょうか。主な機能は次のとおりです。

  • 1つのメッセージを次のメッセージから分離する (フレーミング)
  • メッセージをエンコードする
  • 複数の非同期要求を可能にする
  • エラーを報告する
  • 暗号化をネゴシエーションする
  • 認証をネゴシエーションする

開発者はこれらの機能について心配する必要がないので、他のさまざまな機能をネットワーク・アプリケーションに自由に付け加えることができます。たとえば、メッセージのタイプや構造を考慮できるでしょう。


BEEPの概念

BEEPはピアツーピア・プロトコルであり、HTTPのようなクライアント / サーバーの概念がありません。しかし口論や恋愛と同じく、誰かが最初のきっかけを作らなければなりません。説明のために、接続を開始するピアをイニシエーター、接続を受け入れる側のピアをリスナー と呼ぶことにします。両者の間で接続が確立されたとき、BEEPセッションが作成されます。


図1. BEEPセッション、チャネル、およびプロファイル
図1

チャネル

セッションのすべての通信は、1つまたは複数のチャネル 内で行われます (図1を参照)。2つのピアはただ1つのIP接続を必要とし、それが多重使用されて複数のチャネルを形成します。特定のチャネルの中でどんな通信が可能であるかは、チャネルのサポートするプロファイル によって決定されます (各チャネルごとに、1つまたは複数のプロファイルがあります)。

最初のチャネルchannel 0には特別な目的があります。このチャネルは、後続のチャネルのセットアップをネゴシエーションするためのBEEP管理プロファイルをサポートします。サポートされているプロファイルは、特定のチャネル内で2つのピアが行う対話を厳密に決定します。BEEPを使用したプロトコルの定義とは、結局のところプロファイルの定義です。

プロファイルの2つのタイプ

セッションが確立された後、イニシエーターは必要な特定のプロファイル (またはプロファイルのセット) 用のチャネルを開始するよう要求します。リスナー側がその (それらの) プロファイルをサポートしていれば、チャネルが作成されます。プロファイルそのものは、初期調整用、またはデータ交換用の2つの形式のいずれかです。

調整プロファイルは通信の開始時にセットアップされ、そのセッションの残りの部分に影響を与えます。たとえばTLSプロファイルを要求すると、Transport Layer Securityを使って各チャネルが暗号化されるようになります。その他の調整プロファイルは、認証などのステップを実行します。

データ交換プロファイルは、チャネルにおいて2つのピアの間でどんな交換が許可されるかを設定します。これは、対話するオブジェクト間でどんなメソッドが使用できるかを設定するJavaインターフェースに似ています。XMLネームスペースと同様に、プロファイルはURIで識別されます。たとえば、BEEP Javaツールの "Echo" プロファイルのURIはhttp://xml.resource.org/profiles/NULL/ECHOです。

データ・タイプ

BEEPは、チャネルでやり取りできるデータの種類に制限を設けていません。BEEPは任意のタイプのペイロードをサポートするためにMIME規格を使用します。SOAPメッセージ内部でXML文書やバイナリー・ファイルをどのように送るかというSOAPの問題は、この方法によってうまく回避されます。

XMLとの関係

この記事の冒頭で、BEEPはXMLを利用していると私は述べましたが、読者はこの点をすでに忘れてしまったか、あるいは一体どこでXMLを利用しているのかと不思議に思っていることでしょう。実際、チャネル開始を担当するBEEP管理プロファイルはXML DTDとして定義されます (管理プロファイル定義のポインターについては、参考文献を参照してください)。XMLとBEEPはこの点で深いつながりがあるのです。BEEPはプロトコルのインフラストラクチャーを担当し、XMLはデータ構造を担当します。したがって、BEEPプロファイルでメッセージ構文を定義するとき、自然にXMLを選択することになります (ただし、上記のように任意のMIMEタイプをプロファイルで使用できます)。

チャネル管理プロファイルのほかにも、さまざまな新しいBEEPアプリケーション・プロファイルがXMLを使ってメッセージをエンコードします。これは歓迎すべきことです。XML文書を使って定義された既存のすべてのメッセージ交換標準は、比較的簡単にBEEPプロファイルにマップされるからです。


まとめ

この記事では、BEEPを使用すべき基本的理由は何か、BEEPはどんなアプリケーション分野をターゲットとしているかについて簡単に述べました。BEEPの対話のしくみを、きわめて簡潔に説明しました。次回の記事では、チャネルやプロファイルを使ってどのように通信が行われるかを詳細に説明し、Javaでの実装例を示します。


参考文献

  • beepcore.org はBEEP仕様の本家であり、さまざまなツールをWebに公開しています。

  • この記事でご紹介したBEEPコアはRFC 3080 に定義されています。

  • xml-dist-app メーリング・リストには、HTTP再利用の利点その他に関する非常に多数の討論が掲載されています。

  • Keith Moore氏によるInternet DraftOn the use of HTTP as a Substrate for Other Protocols は、HTTPの適切な再利用について推奨しています。

  • developerWorksのWeb servicesゾーンには、SOAPおよび関連テクノロジーに関する情報が多数紹介されています。

  • WebDAV.org はWebDAVについてより詳しく紹介しています。

  • Internet Printing Protocol はInternet Printing Protocol (IPP) の背景を詳細に説明しています。

著者について

Edd Dumbill氏はXML.com の編集長であり、XMLデベロッパーのためのニュース・サイトXMLhack の編集者兼発行者でもあります。Programming Web Services with XML-RPC (O'Reilly) の著者の1人であり、生命科学の知的財産を交換するPharmalicensing の共同設立者兼アドバイザーです。EddはXML Europe コンファレンスのプログラム司会者でもあります。

不正使用の報告のヘルプ

不正使用の報告

ありがとうございます。 このエントリーは、モデレーターの注目フラグが設定されました。


不正使用の報告のヘルプ

不正使用の報告

不正使用の報告の送信に失敗しました。


developerWorks: サイン・イン


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


お客様が developerWorks に初めてサインインすると、プロフィールが作成されます。 プロフィールで選択した情報は公開されますが、いつでもその情報を編集できます。 お客様の姓名(非表示設定にしていない限り)とディスプレイ・ネームは、投稿するコンテンツと一緒に表示されます。

表示名をお選びください

developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

(半角英数字で3文字以上31文字以下にする必要があります)


「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 利用条件

 


この記事を評価する

コメント

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=239905
ArticleTitle=XML ウォッチ: BEEPの概観
publish-date=12012001
author1-email=edd@xml.com
author1-email-cc=