リモート プロシージャ コール (RPC) は、クライアント サーバー ベースの分散アプリケーションを構築するための強力な手法です。関数呼び出しまたはサブルーチン呼び出しとも呼ばれます。リモート プロシージャ コールとは、プログラマがリモート インタラクションの詳細を明示的に指定することなく、コンピュータ プログラムがローカル プロシージャ コールとしてコーディングされたプロシージャを別のアドレス空間で実行させることです。プログラマは、サブルーチンが実行プログラムに対してローカルであってもリモートであっても、基本的に同じコードを作成します。これは、要求と応答のメッセージ パッシング システムを介して実装されるクライアントとサーバーの対話形式です。
RPC モデルの意味するところは、 位置の透明性 ローカルでもリモートでも、呼び出し手順はほぼ同じです。通常、これらは同一ではないため、ローカル呼び出しとリモート呼び出しを区別できます。リモート呼び出しは通常、ローカル呼び出しよりも桁違いに遅く、信頼性も低いため、区別することが重要です。
RPC は、プロセス間通信 (IPC) の一種であり、プロセスが異なればアドレス空間も異なります。物理アドレス空間は同じであっても、同じホスト マシン上に異なる仮想アドレス空間があります。一方、異なるホスト上にある場合は、物理アドレス空間も異なります。
リモート プロシージャ コールを行う方法
呼び出し環境は一時停止され、プロシージャのパラメータがネットワークを介してプロシージャが実行される環境に転送され、そこでプロシージャが実行されます。
プロシージャが終了して結果が生成されると、プロシージャは呼び出し環境に戻され、通常のプロシージャ呼び出しから戻ったかのように実行が再開されます。
注: RPC は、呼び出し元と呼び出し先の間で制御の流れが交互に行われる、クライアントとサーバー (クエリと応答など) の対話に特に適しています。概念的には、クライアントとサーバーは同時に実行されません。代わりに、実行スレッドは呼び出し元から呼び出し先にジャンプし、その後再び戻ります。
RPC の種類
オペレーティング システムには、次の 3 種類のリモート プロシージャ コール (RPC) があります。
1. コールバック RPC
このタイプの RPC では、参加しているプロセス間の P2P パラダイムが可能になります。これは、プロセスがクライアント サービスとサーバー サービスの両方になるのに役立ちます。コールバック RPC には次のような機能があります。
ランダムな順序のSQL
- 対話型アプリケーションの問題をリモートで処理します。
- クライアントハンドルを備えたサーバーを提供します。
- コールバックによりクライアントプロセスが待たされます。
- コールバックのデッドロックを管理します。
- これにより、参加するプロセス間のピアツーピア パラダイムが促進されます。
2. ブロードキャスト RPC
ブロードキャスト RPC は、ネットワーク上でクライアントのリクエストをブロードキャストし、そのリクエストを処理するメソッドを使用してすべてのサーバーによって処理されます。ブロードキャスト RPC には次のような機能があります。
- クライアントの要求メッセージをブロードキャストする必要があることを指定できます。
- ブロードキャストポートを宣言できます。
- 物理ネットワークの負荷を軽減するのに役立ちます。
3. バッチモード RPC
バッチ モード RPC は、クライアント側の送信バッファ内で RPC 要求をキューに入れて分離し、ネットワーク上で 1 つのバッチとしてサーバーに送信するのに役立ちます。バッチモード RPC には次のような機能があります。
- リクエストを 1 つのバッチとしてネットワーク経由でサーバーに送信することで、リクエストの送信に伴うオーバーヘッドを最小限に抑えます。
- このタイプの RPC プロトコルは、より低い呼び出しレートを必要とするアプリケーションでのみ効率的です。
- 信頼性の高い伝送プロトコルが必要です。
RPCって何をするの?
RPC フレームワークを使用するプログラム ステートメントが実行可能プログラムにコンパイルされると、リモート プロシージャ コードを表すスタブがコンパイルされたコードに含まれます。
プログラムが実行され、プロシージャ呼び出しが発行されると、スタブは要求を受信し、ローカル コンピューターのクライアント ランタイム プログラムに転送します。クライアント スタブは、初めて呼び出されるときに、ネーム サーバーに接続して、サーバーが存在するトランスポート アドレスを決定します。
クライアント ランタイム プログラムは、リモート コンピュータとサーバー アプリケーションのアドレス指定方法を認識し、リモート プロシージャを要求するメッセージをネットワーク経由で送信します。同様に、サーバーには、リモート プロシージャ自体とインターフェイスするランタイム プログラムとスタブが含まれており、応答要求プロトコルも同様に返されます。
マークダウン取り消し線
RPCの特徴
オペレーティング システムのリモート プロシージャ コール (RPC) には次のような機能があります。
- RPC は、メッセージ受け渡しプロセスの複雑さをユーザーから隠します。
- RPC は、トランスポート層などの OSI モデルの特定の層のみを使用します。
- クライアントは、高水準言語を使用してサーバーと通信できます。
- RPC は、ローカル環境とリモート環境の両方で適切に機能します。
- RPC のプログラムはシンプルなコードで書かれており、プログラマにとっては容易に理解できます。
- オペレーティング システムは、RPC に関連するプロセスとスレッドを簡単に処理できます。
- オペレーティング システムは、RPC の抽象化をユーザーから隠します。
RPC はどのように機能するのでしょうか?
リモート プロシージャ コールが呼び出されると、呼び出し環境は一時停止され、プロシージャのパラメータがネットワークを介してプロシージャが実行される環境に転送され、その環境でプロシージャが実行されます。
プロシージャが終了すると、結果は呼び出し環境に転送され、通常のプロシージャ呼び出しから戻ったかのように実行が再開されます。
リモート プロシージャ コール (RPC) は、オペレーティング システムの次の手順で機能します。
ステップ1: クライアント、クライアント スタブ、および RPC ランタイムはクライアント マシン上で実行されます。
ステップ2: クライアントは、通常の方法でパラメータを渡すことによってクライアント スタブ プロセスを開始します。プロシージャパラメータのパッキングはと呼ばれます マーシャリング 。クライアント スタブはクライアント自身のアドレス空間内に格納し、またローカル RPC ランタイムにサーバー スタブに送り返すように要求します。
ステップ 3: この段階では、ユーザーは通常のローカル プロシージャ コールを行うことで RPC にアクセスできます。 RPC ランタイムは、クライアントとサーバー間のネットワーク間のメッセージの送信を管理し、再送信、確認応答、ルーティング、および暗号化のジョブも実行します。
ステップ 4: サーバー プロシージャが完了すると、サーバー スタブに戻り、戻り値がメッセージにパック (マーシャリング) されます。次に、サーバー スタブはメッセージをトランスポート層に送り返します。
ステップ5: このステップでは、トランスポート層は結果メッセージをクライアント トランスポート層に送り返し、クライアント トランスポート層はメッセージをクライアント スタブに返します。
配列リストとリンクリスト
ステップ6: この段階では、クライアント スタブが結果のパケット内の戻りパラメータをデマーシャリング (アンパック) し、実行プロセスが呼び出し元に戻ります。
リモート プロシージャ コール (RPC) の問題
オペレーティング システムでは、リモート プロシージャ コールまたは RPC は、次のような解決しなければならない問題に直面していました。
1. RPC ランタイム
RPC ランタイム システムは、RPC メカニズムの基礎となるネットワーク通信を処理するルーチンとサービスのライブラリです。 RPC 呼び出しの過程で、クライアント側とサーバー側のランタイム システム コードはバインディングを処理し、適切なプロトコルを介した通信を確立し、クライアントとサーバーの間で呼び出しデータを渡し、通信エラーを処理します。
2. スタブ
スタブの機能は、プログラマが作成したアプリケーション コードに透明性を提供することです。
3. バインディング
クライアントは、誰に電話すればよいのか、サービスがどこにあるのかをどのようにして知るのでしょうか?
最も柔軟な解決策は、動的バインディングを使用し、RPC が最初に行われる実行時にサーバーを検索することです。クライアント スタブが初めて呼び出されるとき、ネーム サーバーに接続して、サーバーが存在するトランスポート アドレスを決定します。バインディングは 2 つの部分で構成されます。
4. RPC に関連する呼び出しセマンティクス
ABSCコード
主に以下の選択肢に分かれますが、
RPCの特徴
リモート プロシージャ コールの基本的な特徴は次のとおりです。
- 呼び出されたプロシージャは別のプロセス内にあり、別のマシンに存在する可能性があります。
- プロセスはアドレス空間を共有しません。
- パラメータは値によってのみ渡されます。
- RPC はサーバー プロセスの環境内で実行されます。
- 呼び出し側プロシージャの環境へのアクセスは提供されません。
RPC の利点
RPC の利点は次のとおりです。
- RPC メソッドは、高級言語でのプロシージャ コールを従来どおり使用して、クライアントがサーバーと通信するのに役立ちます。
- RPC メソッドはローカル プロシージャ コールに基づいてモデル化されていますが、プロシージャは別のプロセス、通常は別のコンピュータで実行される可能性が最も高くなります。
- RPC はプロセス指向モデルとスレッド指向モデルをサポートします。
- RPC は、内部メッセージ受け渡しメカニズムをユーザーから隠蔽します。
- コードの書き直しと再開発に必要な労力は最小限で済みます。
- リモート プロシージャ コールは、配布およびローカル環境に使用できます。
- パフォーマンスを向上させるためにプロトコル層の多くをコミットします。
- RPC は抽象化を提供します。たとえば、ネットワーク通信のメッセージ パッシングの性質はユーザーには隠されたままです。
- RPC を使用すると、ローカル環境だけでなく分散環境でもアプリケーションを使用できます。
- RPC コードを使用すると、書き直しや再開発の労力が最小限に抑えられます。
- RPC でサポートされるプロセス指向モデルとスレッド指向モデル。
RPCのデメリット
RPC を使用する場合のいくつかの欠点を次に示します。
- リモート プロシージャ コールは値とポインタ値のみによってパラメータを渡しますが、これは許可されていません。
- リモート プロシージャの呼び出し (および戻り) 時間 (つまり、オーバーヘッド) は、ローカル プロシージャよりも大幅に短縮できます。
- このメカニズムには通信システム、別のマシン、別のプロセスが関与するため、障害に対して非常に脆弱です。
- RPC の概念はさまざまな方法で実装できますが、これは標準ではありません。
- RPC は主に対話ベースであるため、ハードウェア アーキテクチャの RPC には柔軟性がありません。
- リモート プロシージャ コールによりプロセスのコストが増加します。