RNS 機能説明書 本書では、本実装のシステム構成と各機能の概要を説明します。 利用方法については INSTALL と「RNS 操作説明書」(GUIDE.ja) を参照してく ださい。 ===== 目次 ===== (1) はじめに (2) RNS 仕様について (3) 用語の説明 (4) システム構成 (5) ファイル構成 (6) サーバ機能 (7) クライアント機能 (8) 各種クライアント * クライアントコマンド * RNSFS-FUSE * RNSWeb * 性能計測コマンド * 動作テストコマンド (9) 拡張機能 * キーバリュー操作機能 * アクセス制御機能 * クライアントキャッシュ機能 * 性能計測機能 * 同一サーバ内 EPR 自動変換機能 * ログ機能 (10) 主な処理の流れ ================= (1) はじめに 本システムは、RNS 1.1 の仕様に基づいた実装のひとつです。 RNS は、パス名に対して、任意のサービスや資源へアクセスするための情報 を登録しておく仕組みです。 (2) RNS 仕様について 以下の仕様に基づいて本システムを実装しています。 - RNS Specification 1.1 http://www.gridforum.org/documents/GFD.171.pdf - RNS 1.1 OGSA WSRF Basic Profile Rendering 1.0 http://www.gridforum.org/documents/GFD.172.pdf - WS-Iterator 1.0 http://www.gridforum.org/documents/GFD.188.pdf - RNS metadata search interface (draft) http://www.ogf.org/pipermail/gfs-wg/2011-January/000202.html (3) 用語について * Web サービス HTTP や HTTPS (など) の通信経路上で XML 形式による SOAP メッセージ を相互にやりとりする仕組みです。 本システムでは、GT4 (後述) のライブラリと枠組を利用することで、 Web サービスの通信プロトコルを意識せずに、クライアントとサーバがお 互いにメッセージをやりとりしています。 * RNS Resource Namespace Service の略です。WSRF (後述) に基づいた Web サー ビスの仕様です。 * WSRF Web Services Resource Framework の略です。リモートのリソース (後述) を Web サービス経由で操作する仕組みです。 * サーバ 本書では、単にサーバと表記した場合は、GT4 (後述) の Web サービスコ ンテナ内で動作する、RNS のサーバ側実装を指します。 * クライアント 本書では、単にクライアントと表記した場合は、RNS のクライアント API を利用しているアプリケーションすべてを指します。 * ディレクトリ この説明書では、特に指定が無い場合は RNS 上のディレクトリを指します。 各ディレクトリは、複数のエントリ (後述) を持ち、それらは子ディレク トリやジャンクションです。ディレクトリは、WSRF のリソース (後述) と して定義されています。 一般的なファイルシステムのディレクトリと異なり、RNS の仕様では、複 数の親ディレクトリから一つのディレクトリを参照したり、子ディレクト リから親ディレクトリを参照することで、無限に辿るような構造を作れて しまうことに注意します。 また、RNS の仕様では、親ディレクトリからの参照だけを削除し、ディレ クトリの実体となるリソース (後述) を削除 (destroy) しない場合は、こ のリソースを削除する方法がないことにも注意します。 * パス名 名前をスラッシュ文字で区切った階層構造を表す名前です。パス名を解釈 するのはサーバ側ではなく、クライアント側です。 RNS のディレクトリは、参照元の親ディレクトリから名前が付けられて参 照されているので、それらの参照情報を繋いで階層を構成できます。 * リソース (Resource) (資源) WSRF の仕様では、Web サービスが管理できる任意の資源一つ一つです。リ ソースを EPR (後述) で指すことができます。 Web サービスのインターフェース (WSDL) ごとに、一つのリソース構造を 持つことができます。 各ディレクトリの情報を、それぞれリソースとして扱います。 また、本実装では、検索結果を一時的にリソースとして保存し、ユーザー に分割して結果を返すことにも利用しています。 * エントリ 本書では、単にエントリと表記した場合は、他の RNS のディレクトリや任 意のサービスへの参照情報を指します。名前に対して、EPR (後述) とメタ データ (後述) を持つことができます。 * リスト 本書では、単にリストと表記した場合は、ディレクトリごとに管理するエ ントリのリストを指します。 * ジャンクション 本書では、単にジャンクションと表記した場合は、他サービスへの EPR (後述) が登録されたエントリを指します。 * EPR Endpoint Reference の略です。EPR は、任意のサービスや、サービスに対 するリソースへ参照するための情報です。 任意の URL と任意のリソースに対するキー情報を格納できます。URL だけ を格納する用途でも問題ありません。 RNS では、ジャンクションの参照先だけでなく、自身のディレクトリ一つ 一つも EPR で指すことで、アクセスします。 * メタデータ 各エントリが持つ任意の XML 文書です。RNS の仕様として、内容は定義さ れていません。 RNS の情報を扱うアプリケーションが、自由に参照先に関する情報を格納 して利用することができます。 検索時にこの情報を利用して、エントリを探すこともできます。 * GT4 Globus Toolkit 4 の略です。本システムは、GT4 の Web サービス実装 (WS Core) を利用し、Web サービスコンテナ (globus-start-container) の中で RNS のサーバが動作します。 (4) システム構成 本システムは、以下の構成 [図 1] となっています。 [図 1] システム全体構成図 ---------------- |RNS applications| ---+------------ | ---+---------- |RNS client API| <--[GSI/VOMS user certificate](optional) ---+---------- | ---+------------------ |GT4 WS Core client API| ---+------------------ | Internet (SOAP,GSI) | ---+--------------------- |GT4 Web service container| ---+--------------------- | ---+------ ------------ |RNS server|--|Apache Derby|--(disk) ---------- ------------ RNS のシステムは、サーバ機能とクライアント機能で構成されます。 サーバは、GT4 の Web サービスコンテナ内で動作します。 クライアントアプリケーションは、RNS と GT4 のクライアント API を利用 して、RNS サーバへアクセスします。 GT4 のクライアントライブラリと GT4 の Web サービスコンテナは、インター ネットを経由して、SOAP メッセージをやりとりします。 サーバでは Apache Derby のデータベースに、RNS のディレクトリ情報を保 存します。設定で他のデータベース実装へ保存するように変更することもで きます。 サーバとクライアントは、ユーザー証明書を使って GSI で通信することもで きます。 さらに、クライアントが VOMS のユーザー証明書を使えば、サーバで VOMS の情報をグループの情報として扱うことができます。 クライアントが複数のサーバへアクセスする場合は、以下の例 [図 2] のよ うな経路で、クライアントが各サーバと直接通信します。 [図 2] クライアントから複数のサーバへ接続する場合の通信経路図 (例) ------------ +---|RNS server A| (path: / ) ---------------- | ------------ |RNS applications|----+ ---------------- | ------------ +---|RNS server B| (path: /RNS_A) | ------------ | | ------------ +---|RNS server C| (path: /RNS_B) | ------------ : ディレクトリから、他の RNS のサーバへのディレクトリを参照するようにす ることで、ディレクトリ構造を分散管理し、全体を一つの階層構造として扱 うことができます。クライアントが複数のサーバを辿って目的のエントリへ アクセスすることになります。 各種クライアントの実装と、RNS クライアントライブラリ、関連ソフトウエ アとの関係は、以下の構成 [図 3] となっています。 [図 3] 各種 RNS クライアントと関連ソフトウエアの関係図 ------------ ------------------ |RNS commands|-------------------------+---|RNS/GT4 client API|--... ------------ | ------------------ | ------ ---- ------ ---------- | |Kernel|-|FUSE|-|fuse4j|-|RNSFS-FUSE|--+ ------ ---- ------ ---------- | | ----------- ------ ------ | |Web browser|--|Tomcat|--|RNSWeb|------+ ----------- ------ ------ | | ---------------- | |lfcj-rns-migrate|---------------------+ ----+----------- | | ---- ---------- | +----|LFCJ|--(GSI)--|LFC server| | ---- ---------- | | ------------- | |rns-gridftp-*|------------------------+ ----+-------- | -------------- +-----(GSI)--|GridFTP server| -------------- (5) ファイル構成 本実装のソースパッケージを展開すると、以下のディレクトリがあります。 それぞれディレクトリの概要を説明します。 * ルートディレクトリ 説明書やインストーラーを置いています。 * src/ サーバとクライアントのソースコードを置いています。 ソースコードの構造とそれぞれのクラスの概要については javadoc/index.html を参照してください。 Web サービスをデプロイするための情報を、以下のファイルで行なってい ます。 src/org/naregi/rns/deploy-jndi-config.xml src/org/naregi/rns/deploy-server.wsdd * javadoc/ src/ ディレクトリ以下に対する Javadoc (API リファレンス) を置いてい ます。 * rnsfs/ RNSFS-FUSE のソースコードを置いています。 * lib/ 同梱している依存ライブラリを置いています。 * etc/ インストール (デプロイ) 時に利用する情報を置いています。インストー ルするコマンドを定義しています。 * schema/ WSDL ファイルや、XSD ファイルを置いています。本実装の Web サービス のインターフェースを定義しています。 * command/ インストーラーによってインストールされないコマンドを起動するための スクリプトを置いています。おもに開発者向けのコマンドです。 (6) サーバ機能 サーバは、おもに、クライアントによって EPR を指定されたディレクトリに 対する操作を行ないます。 サーバは、Java で記述されており、GT4 の Web サービスコンテナ内で動作 します。 サーバは、多数のクライアントからの要求を同時に受け付けることができま す。 サーバの動作を設定ファイルで変更することができます。設定内容と設定方 法は sample.rns-server.conf と「RNS 操作説明書」を参照してください。 本システムのサーバは 5 種類あります。それぞれのサーバには、以下のオペ レーションがあります。 * /wsrf/services/rns/ResourceNamespaceService RNS の主機能を実装しています。RNS 1.1 で定義されているオペレーショ ンを実装しています。 ある EPR が指す RNS のディレクトリに対して、以下のオペレーションを 実行できます。 [add] 名前に対して EPR とメタデータを関連づけて、このディレクトリ以下に 新規にエントリを作成します。ディレクトリとジャンクションをともに 作成できます。一度に多数作成することもできます。 ディレクトリを作成する場合は、サーバ内で自動的にリソースを生成し、 そのリソースへの EPR をエントリに関連付けます。 ジャンクションを作成する場合は、参照情報だけをエントリとして登録 します。 [lookup] エントリの情報を取得できます。名前に対して EPR とメタデータを取得 できます。一度に多数指定して取得することもできます。またはこのディ レクトリが持つ全リストを取得することもできます。 エントリ数が多い場合は、場合は、ListIteratorService への EPR を返 します。 [remove] エントリを削除できます。一度に多数削除することもできます。 ここでは、参照情報だけを削除し、参照先のディレクトリ実体であるリ ソースを削除しないことに注意します。 [rename] エントリをこのディレクトリ内で改名できます。一度に多数改名するこ ともできます。 他のディレクトリへの移動はできません。移動する場合は、クライアン ト側で、参照情報のコピーと削除を行なうことになります。 [setMetadata] エントリのメタデータを置換します。一度に多数置換することもできま す。 RNS の仕様では、XML 文書の一部を置換することはできません。一部を 変更する場合は、クライアント側で加工する必要があります。 [destroy] ディレクトリの実体を意味するリソースを破棄します。 このディレクトリが管理していたエントリの参照先の実体 (リソースや ファイルなど) が残っていたとしても、このディレクトリ情報をすべて 破棄してしまうことに注意します。 リソースに対して GT4 の RemoveCallback インターフェースを実装する ことで、このオペレーションを利用しています。 [getMultipleResourceProperties] ([getResourceProperty]) リストの要素数 (エントリの数)、リソースの作成時刻、リソースへ最終 アクセス時刻、リソースへの最終更新時刻、リソースを読み書き可能か どうか、の情報を取得できます。 これらは RNS の仕様で定義されているリソースのプロパティです。 リソースに対して GT4 の ResourceProperties インターフェースを実装 することで、このオペレーションを利用しています。 * /wsrf/services/rns/ListIteratorService リストを分割して取得するためのオペレーションを実装しています。 WS-Iterator の仕様に基づいたインターフェースを実装しています。 * /wsrf/services/rns/SearchService XQuery で検索するためのオペレーションを実装しています。 ある EPR が指す RNS のディレクトリに対して、以下のオペレーションを 実行できます。 [search] このリソースが指すディレクトリにあるいくつかのエントリに対して、 またはこのディレクトリにある全てのエントリに対して、一つの XQuery 文を実行して、検索し、絞り込むことができます。 検索結果が多い場合は、SearchIteratorService への EPR を返します。 * /wsrf/services/rns/SearchIteratorService SearchService で検索された結果を分割して取得するためのオペレーショ ンを実装しています。WS-Iterator の仕様に基づいたインターフェースを 実装しています。 * /wsrf/services/rns/ExtensionService アクセス制御情報の操作など、RNS の仕様にはないオペレーションを実装 しています。 (7) クライアント機能 クライアントは、サーバの各種オペレーションを組み合わせたり、情報を キャッシュしたりしながら、RNS の各種操作を行ないます。 クライアントは、RNS のクライアント API (Java) を組合せて実装していま す。 サーバは、パス名を直接解釈しません。パス名を解釈しているのは クライア ント API です。パス名にしたがって サーバのディレクトリを辿り、そのディ レクトリを意味するリソースに対して、オペレーションを呼び出します。 クライアントの動作を設定ファイルで変更することができます。クライアン ト API を使ったアプリケーション全体に影響します。設定内容と設定方法は sample.rns-client.conf と「RNS 操作説明書」を参照してください。 (8) 各種クライアント クライアント API により、RNS サーバに対して、または、RNS サーバから取 得した情報に対して、さまざまな操作を行なうことができます。 RNSClient, RNSSearchClient, RNSExtensionClient は、スレッドセーフです。 本システムの各種コマンドは、このクライアント API を利用して実装してい ます。クライアント API を利用して、新たにコマンドを作成することができ ます。javadoc/index.html を参照してください。 RNS サーバと他のサービスとを連係した実装例として、lfcj-rns-migrate コ マンドや rns-gridftp-get コマンドなどがあります。 RNS クライアントの API を使ったアプリケーションとして、以下を実装して います。 - クライアントコマンド - RNSFS-FUSE - RNSWeb - 動作テストコマンド - 性能計測コマンド * クライアントコマンド サーバを操作するためのコマンドを標準で用意しています。各コマンドに 共通のオプションと、それぞれ固有のオプションを持ってます。(一部のコ マンドは共通のオプションがありません) [RNS 標準コマンド] - rns-stat - rns-ls - rns-ls-l - rns-mkdir - rns-rmdir - rns-rm - rns-rm-r - rns-rm-f - rns-add - rns-mv - rns-getepr - rns-setxml - rns-getxml [RNS コマンド バルク操作] - rns-bulk-add - rns-bulk-remove - rns-bulk-rename - rns-bulk-setxml [RNS メタデータ応用コマンド] - rns-xquery - rns-kv-get - rns-kv-set - rns-kv-ls - rns-kv-rm [RNS ACL 管理コマンド] - rns-callerinfo - rns-getacl - rns-setacl - rns-rmacl - rns-chmod - rns-chown - rns-chgrp [RNS 拡張コマンド] - rns-version - rns-ping [RNS/GridFTP 連携コマンド] - rns-gridftp-put - rns-gridftp-get - rns-gridftp-ln - rns-gridftp-del [LFC 関連コマンド] - lfcj-rns-migrate - lfcj-ls - lfcj-stat 各コマンドについては「RNS 操作説明書」を参照してください。 * RNSFS-FUSE ローカル PC のファイルシステムとして RNS の名前階層をマウントし、 RNS の情報を操作できます。 FUSE (Filesystem in USErspace) と fuse4j の仕組みを使って実装してい ます。 利用方法については「RNS 操作説明書」を参照してください。 * RNSWeb ウェブブラウザ使って RNS を操作することができます。 Apache Tomcat 上で動作する RNS クライアントライブラリを用いた JSP アプリケーションとして実装しています。 RNSWeb は、本システムのソースコードとは別のソースコードパッケージに なっています。 利用方法については「RNS 操作説明書」を参照してください。 * 性能計測コマンド 本システムの性能を計測するためのコマンドを用意しています。 詳しくは「RNS 操作説明書」を参照してください。 * 動作テストコマンド 本システムの動作を確認するためのコマンドを用意しています。 詳しくは「RNS 操作説明書」を参照してください。 (9) 拡張機能 本実装には、RNS 仕様では定義されていない機能を実装しています。 * キーバリュー操作機能 本実装専用のコマンド (rns-kv-*) を使って、メタデータの XML に対して、 独自の構造で情報を格納することにより、あるキー名に対するバリュー (値の文字列) のペアを複数格納することができます。そして、そのキーと バリューの組合せを検索することができます。 詳しくは「RNS 操作説明書」を参照してください。 * アクセス制御機能 本実装では、サーバ側で GSI 認証を利用して、アクセス制御できます。 各ディレクトリは、アクセス制御するための情報 (ACL) を持つことができ ます。ユーザーを識別するための GSI 認証や VOMS の情報を、ACL へ格納 して、ことができます。それによりディレクトリ単位で、ユーザーをアク セス制御できます。 ACL を取得したり編集するコマンドを用意しています。 その他、アクセス制御せず、誰でも自由にアクセス可能にしたり、ディレ クトリ単位ではなく、サーバ全体としてユーザ証明書の情報だけでアクセ ス制御する方法も設定で切替えることができます。 また、GSI の設定を行なえば、通信経路の暗号化や署名などを行なうこと もできます。 アクセス制御機能の使い方、ACL の扱い方、GSI を利用するための設定方 法などは「RNS 操作説明書」を参照してください。 * クライアントキャッシュ機能 クライアントは、lookup オペレーションによってサーバから返された情報 を、クライアントの設定で指定した時間、保持するようにしました。 * 性能計測機能 サーバ内部の主な機能単位で、実行時間を計測し、クライアントへレポー トする機能があります。クライアントとしてコマンドと、サーバにオペレー ションや計測点を追加しています。 サーバ内の処理内容を計測する rns-profile コマンドについては「RNS 操 作説明書」を参照してください。 * 同一サーバ内 EPR 自動変換機能 ホスト名を変更することを想定し、EPR が自分自身への RNS サーバ内のエ ントリを指している場合、EPR に記述された ホスト名を自動的に変換でき ます。 エントリとして登録される EPR が同じサーバ内のディレクトリを指す場合、 EPR 情報の URL 部分を無視して、データベース内を参照するための情報 (リソースのキー) (データベース内での ID) だけをデータベースに保存し ています。 クライアントに EPR を返す場合は、そのときのホスト名を使って URL を 格納した EPR を返します。 この機能により、ホスト名が変わった場合でも、そのサーバ内でのあるディ レクトリから子ディレクトリへの参照構造は失われません。 なお、他の RNS サーバを参照する EPR や、他のサービスを参照する EPR を格納する場合、EPR 内の URL 情報をそのままデータベースへ保存してい ます。RNS の仕様では、EPR の参照先ホスト名が変わった場合を想定して いません。そのような場合には、エントリを一旦削除して登録しなおすこ とで、他のサーバへ参照できるようになります。 * ログ機能 サーバでは、動作のログを記録できます。 設定方法は「RNS 操作説明書」を参照してください。 (10) 主な処理の流れ 以下では、主な処理の流れを説明します。 * リスト操作時の動作 1. クライアントは、RNSClient の list() メソッドを呼ぶ。 2. list() メソッドは、指定されたパス名までサーバへ lookup オペレー ションのリクエストを繰り返して、パスに対応する EPR を取得する。 その EPR に対応するディレクトリに対して、サーバへリストの要求 (名前を指定せずに lookup リクエスト) をする。 3. サーバの lookup オペレーションでは、EPR が指すディレクトリに対応 するリソースを探し、そのリソースに対してリストを要求する。データ ベースから、エントリのリストを読み出してクライアントへ返す。結果 が大きい場合は、リスト操作用の WS-Iterator の EPR も返す。 4. クライアントは、サーバからリスト操作用の WS-Iterator の EPR を受 け取った場合は、その EPR へ接続し、リストを分割して受け取る。 * 新規ディレクトリ作成の動作 1. クライアントは RNSClient の mkdir() メソッドを呼ぶ。 2. mkdir() メソッドは、指定されたパス名の親ディレクトリまでサーバへ lookup オペレーションのリクエストを繰り返して親ディレクトリの EPR を取得する。その EPR に対して、name を指定して add オペレー ションのリクエストをする。 3. サーバの add オペレーションでは、リクエストに EPR が指定されてい ない場合、新規リソースを生成する。そして、親ディレクトリからその リソースを参照するようにエントリを追加し、データベースへ保存する。 * ディレクトリ削除の動作 1. クライアントは RNSClient の rmdir() メソッドを呼ぶ。 2. rmdir() メソッドは、指定されたパス名の親ディレクトリまでサーバへ lookup 操作のリクエストを繰り返して、親ディレクトリが指す EPR と、 パス名が指す EPR を取得する。 EPR が指す先がディレクトリであった場合、要素数を取得し、子エント リ数が 0 の空ディレクトリであるかどうかを確認する。 パス名が指す EPR に対してに対して、destroy オペレーションをリク エストする。 次に、親ディレクトリの EPR に対して name を指定して remove オペ レーションをリクエストする。 3. サーバの destroy オペレーションでは、EPR が指すリソースを探して、 リソースを削除する。 4. サーバの remove オペレーションでは、EPR が指すリソースを探して、 リストから指定された名前のエントリを削除する。 * メタデータ検索の動作 1. クライアントは RNSSearchClient の search() メソッドを呼ぶ。 2. search() メソッドは、指定されたパスの EPR を取得する、その EPR に対して XQuery 文を添えて RNS サーバの search オペレーションへ リクエストする。 3. サーバ内では EPR のリソースキーに関連付けられたメタデータをデー タベースから取得する。RNSEntryResponseType 型を XML 表現に直し、 XQuery を処理をする。XQuery の結果も RNSEntryResponseType 型になっ ていたらクライアントへ応答する。該当する結果がなければ何も返さな い。 4. サーバ内に生成した検索結果を一度にクライアントへ返せない場合は、 Search 用の WS-Iterator サービスへの EPR をクライアントに返す。 検索結果は、その WS-Iterator サービスへの EPR に対して関連付けた 一時的にファイルに格納しておく。 その一時ファイルにアクセスがなかった場合に自動的にも破棄される仕 組みで管理しておく。 5. クライアントは、サーバから Search 用の WS-Iterator の EPR を受け 取った場合は、その EPR へ接続し、検索結果を分割して受け取る。 -- 以上