分散コンピューティング環境では、分散オブジェクト通信によって分散オブジェクト間の通信が実現されます。主な役割は、オブジェクトがデータにアクセスし、リモート オブジェクト (非ローカルメモリ空間に存在するオブジェクト) のメソッドを呼び出すことができるようにすることです。リモート オブジェクトでメソッドを呼び出すことは、リモート メソッド呼び出し( RMI ) またはリモート呼び出しと呼ばれ、オブジェクト指向プログラミングにおけるリモート プロシージャコール(RPC) に類似したものです。
クラススタブとスケルトン
通信チャネルを実装する方法として広く使用されているアプローチは、スタブとスケルトンを使用することです。これらは、選択された通信プロトコルに応じて構造と動作が決まる生成されたオブジェクトですが、一般的には、ネットワーク上で信頼性の高い通信を保証する追加機能を提供します。
RMIでは、スタブ(クライアント側のビット)はプログラマーによってインターフェースとして定義されます。rmic (rmiコンパイラー)はこれを使用してクラススタブを作成します。スタブは型チェックを実行します。スケルトンはインターフェーススタブを実装するクラスで定義されます。 [1]
呼び出し元が呼び出されたオブジェクトに対してリモート呼び出しを実行する場合、呼び出し元はスタブに要求を委任し、スタブはリモートスケルトンとの通信を開始します。その結果、スタブは呼び出し元の引数をネットワーク経由でサーバー スケルトンに渡します。次に、スケルトンは受信したデータを呼び出されたオブジェクトに渡し、応答を待機して結果をクライアント スタブに返します。呼び出し元と呼び出されたオブジェクトの間には直接の通信がないことに注意してください。
詳しく言うと、通信はいくつかのステップで構成されます。
- 呼び出し元はスタブによって実装されたローカルプロシージャを呼び出す
- スタブは呼び出しタイプと入力引数をリクエストメッセージにまとめます。
- クライアントスタブはネットワーク経由でサーバーにメッセージを送信し、現在の実行スレッドをブロックします。
- サーバースケルトンはネットワークから要求メッセージを受信する
- スケルトンはリクエストメッセージから呼び出しタイプを解凍し、呼び出されたオブジェクトの手順を検索します。
- スケルトンはプロシージャの引数をアンマーシャリングします
- スケルトンは呼び出されたオブジェクトに対して手順を実行します
- 呼び出されたオブジェクトは計算を実行し、結果を返します
- スケルトンは出力引数を応答メッセージにパックします
- スケルトンはネットワーク経由でクライアントにメッセージを送信します
- クライアントスタブはネットワークから応答メッセージを受信する
- スタブはメッセージから出力引数を展開します
- スタブは出力引数を呼び出し元に渡し、実行スレッドと呼び出し元を解放して実行を続行します。
このアーキテクチャの利点は、呼び出し元も呼び出されるオブジェクトもネットワーク関連のロジックを実装する必要がないことです。ネットワーク上で信頼性の高い通信チャネルを確保するこの機能は、スタブとスケルトンレイヤーに移動されました。
スタブ
分散オブジェクト通信に参加するクライアント側オブジェクトはスタブまたはプロキシと呼ばれ、プロキシ オブジェクトの例です。
スタブは、クライアント側オブジェクトと、スタブを経由してルーティングされるサーバー側オブジェクトへのすべての送信要求のゲートウェイとして機能します。スタブはクライアント オブジェクトの機能をラップし、ネットワーク ロジックを追加することで、クライアントとサーバー間の信頼性の高い通信チャネルを確保します。スタブは、選択した通信プロトコルに応じて手動で作成することも、自動的に生成することもできます。
スタブは次のことを行います。
- サーバースケルトンへの通信を開始する
- 呼び出し元オブジェクトからの呼び出しを変換する
- パラメータの整列
- 呼び出しを実行する必要があることをスケルトンに通知する
- ネットワーク経由でスケルトンに引数を渡す
- スケルトンからの応答のアンマーシャリング
- 通話が終了したことを発信者に通知する
スケルトン
分散オブジェクト通信に参加するサーバー側オブジェクトは、スケルトン(またはスタブ、ここではこの用語は使用しません) と呼ばれます。
スケルトンはサーバー側オブジェクトのゲートウェイとして機能し、すべてのクライアントからのリクエストはスケルトンを経由してルーティングされます。スケルトンはサーバー オブジェクトの機能をラップしてクライアントに公開し、さらにネットワーク ロジックを追加することで、クライアントとサーバー間の信頼性の高い通信チャネルを確保します。スケルトンは、選択した通信プロトコルに応じて手動で作成することも、自動的に生成することもできます。
スケルトンの役割は次のとおりです。
- スタブからの受信データをサーバーオブジェクトへの正しいアップコールに変換する
- 受信したデータから引数をアンマーシャリングする
- サーバーオブジェクトに引数を渡す
- サーバーオブジェクトから返された値のマーシャリング
- ネットワーク経由でクライアントスタブに値を渡す
スタブ/スケルトンアプローチを使用するプロトコル
- ポータブル分散オブジェクト(PDO) - Objective-C
- 共通オブジェクトリクエストブローカーアーキテクチャ(CORBA) – 言語間
- Java リモートメソッド呼び出し(Java RMI) – Java
- 分散コンポーネントオブジェクトモデル(DCOM) – Microsoft、言語間
- (スタブは「プロキシ」と呼ばれ、スケルトンは「スタブ」と呼ばれることに注意してください[2])
- .NET リモート処理– Microsoft、言語間
- DDObjects –ボーランドデルファイ
- 分散 Ruby (DRb) – Ruby
参照
参考文献
- ^ 「Java リモート メソッド呼び出し (RMI) の概要」www-itec.uni-klu.ac.at。2002 年 3 月 26 日時点のオリジナルよりアーカイブ。
- ^ MSDN: マーシャリングの詳細。
- Plášil, František および Stal, Michael。「CORBA、Java RMI、および COM/DCOM における分散オブジェクトとコンポーネントのアーキテクチャ的観点」Wayback Machineに 2007-06-24 にアーカイブ、Software Concepts & Tools (vol. 19, no. 1)、1998 年 1 月。
- Druschel, Peter 「分散プログラム構築」 2016-03-04 にWayback Machineでアーカイブ
- Farley, Jim. Java 分散コンピューティング、O'Reilly、1998 年 1 月。
- 研究論文は 2008-02-12 にWayback Machineにアーカイブされています。プラハ・カレル大学分散システム研究グループ
