分散システムにおけるリモート プロシージャ コール (RPC) プロトコル

⚡ スマートサマリー

リモートプロシージャコール(RPC)は、プロセス間通信プロトコルであり、分散クライアント/サーバシステムにおいて、通常のローカル関数呼び出しの背後にネットワークの詳細を隠蔽することで、プログラムが別のアドレス空間またはマシンでプロシージャを実行できるようにするものです。

  • 📞 定義: RPCを使用すると、クライアントはリモートサーバー上のプロシージャを、まるでローカル呼び出しであるかのように呼び出すことができます。
  • 🗂️ タイプ: コールバック、ブロードキャスト、バッチモードのRPCは、リクエストのルーティングとキューイングの方法が異なります。
  • 🏗️ Archi構造: 各呼び出しにおいて、クライアント、クライアントスタブ、RPCランタイム、サーバースタブ、およびサーバーの5つの要素が連携して動作します。
  • 🔄 使い方: スタブはパラメータをメッセージにマーシャリングし、呼び出し元に返される結果をアンマーシャリングします。
  • <XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMXA><XNUMXxXNUMX><XNUMXxXNUMXA>️️ トレードオフ: RPCは分散コードを簡素化するが、ローカル呼び出しと比較してネットワークのオーバーヘッドと障害発生箇所が増加する。
  • 🤖 AIの視点: gRPCはマイクロサービス間で機械学習モデルを提供し、CopilotはRPCスタブの作成を高速化します。

分散システムにおけるリモートプロシージャコール(RPC)

RPCとは何ですか?

リモートプロシージャコール(RPC) あります プロセス間通信 クライアント/サーバーアプリケーションで使用される技術。RPCはRemote Procedure Callの略です。RPCメカニズムは、コンピュータプログラムが異なるアドレス空間でプロシージャまたはサブルーチンを実行する場合に使用されます。これは、プログラマがリモートインタラクションの詳細を明示的にコーディングすることなく、通常のプロシージャコールとしてコーディングされます。

このプロシージャ呼び出しは、UDPやTCP/IPなどの低レベルのトランスポートプロトコルも管理し、プログラム間でメッセージデータを転送します。

RPC の種類

RPC には次の XNUMX 種類があります。

  • コールバック RPC
  • ブロードキャスト RPC
  • バッチモード RPC

コールバック RPC

このタイプのRPCは、参加するプロセス間でピアツーピア(P2P)パラダイムを実現します。これにより、プロセスはクライアントとサーバーの両方の役割を担うことができます。

コールバック RPC の機能:

  • リモートで処理される対話型アプリケーションの問題を処理します。
  • サーバーにクライアントのハンドルを提供します。
  • コールバックはクライアントプロセスを待機させる。
  • コールバックのデッドロックを管理します。
  • これは、参加するプロセス間でのピアツーピアのパラダイムを促進する。

ブロードキャスト RPC

ブロードキャストRPCとは、クライアントからのリクエストがネットワーク上にブロードキャストされ、そのリクエストを処理するメソッドを持つすべてのサーバーによって処理される仕組みです。

ブロードキャスト RPC の機能:

  • クライアントのリクエストメッセージをブロードキャストする必要があることを指定できます。
  • ブロードキャストポートを宣言できます。
  • これは物理ネットワークへの負荷を軽減するのに役立ちます。

バッチモード RPC

バッチモードRPCは、クライアント側の送信バッファに個別のRPCリクエストをキューイングし、それらをまとめてネットワーク経由でサーバーに送信するのに役立ちます。

バッチモードRPCの機能:

  • リクエストをネットワーク経由でサーバーに一括送信するため、リクエスト送信に伴うオーバーヘッドを最小限に抑えることができます。
  • このタイプのRPCプロトコルは、呼び出し頻度が低いアプリケーションにのみ効率的です。
  • 信頼性の高い伝送プロトコルが必要です。

RPC Archi構造

RPC アーキテクチャには、主に次の 5 つのプログラム コンポーネントがあります。

  1. クライアント
  2. クライアントスタブ
  3. RPC ランタイム
  4. サーバースタブ
  5. サーバー

RPC Archi構造

RPC Archi構造

RPC はどのように機能するのでしょうか?

RPC処理では、以下の手順が実行されます。

ステップ1) クライアント、クライアントスタブ、およびRPCランタイムのインスタンスが1つ、クライアントマシン上で実行されます。

ステップ2) クライアントは、通常の方法でパラメータを渡すことにより、クライアントスタブプロセスを開始します。クライアントスタブは、クライアント自身のアドレス空間内に格納されます。また、ローカルのRPCランタイムに対し、リクエストをサーバースタブに送信するよう要求します。

ステップ3) この段階では、ユーザーは通常のローカルプロシージャコールを行うことでRPCにアクセスします。RPCランタイムは、ネットワークを介したクライアントとサーバー間のメッセージ送信を管理します。また、再送信、確認応答、ルーティング、暗号化といった処理も実行します。

ステップ4) サーバー処理が完了すると、実行はサーバースタブに戻り、サーバースタブは戻り値をメッセージにパック(マーシャリング)します。その後、サーバースタブはそのメッセージをトランスポート層に送信します。

ステップ5) このステップでは、トランスポート層が結果メッセージをクライアントトランスポート層に送り返し、クライアントトランスポート層はメッセージをクライアントスタブに返します。

ステップ6) この段階では、クライアントスタブが結果パケット内の戻りパラメータをデマーシャリング(展開)し、実行は呼び出し元に戻ります。

RPCの特徴

RPC の重要な特徴は次のとおりです。

  • 呼び出されたプロシージャは別のプロセス内で実行されており、そのプロセスは別のマシン上に存在している可能性が高い。
  • プロセスはアドレス空間を共有しません。
  • パラメータは値によってのみ渡されます。
  • RPC はサーバー プロセスの環境内で実行されます。
  • 呼び出し元のプロシージャの環境へのアクセスは提供されません。

RPCの特徴

RPC の重要な機能は次のとおりです。

  • シンプルな呼び出し構文。
  • 既知の意味論を提供します。
  • 明確に定義されたインターフェースを提供する。
  • 同一マシン上または異なるマシン上のプロセス間で通信を行うことができます。

RPC の利点

RPCのメリット/利点は以下のとおりです。

  • RPCは、高級言語における従来の手続き呼び出しを用いることで、クライアントとサーバー間の通信を支援する。
  • RPCはローカルプロシージャコールをモデルにしているが、呼び出されるプロシージャは別のプロセスで、通常は別のコンピュータ上で実行される。
  • RPCは、プロセス指向モデルとスレッド指向モデルの両方をサポートしています。
  • RPCは、内部のメッセージ伝達メ​​カニズムをユーザーから隠蔽する。
  • パフォーマンスを向上させるためにプロトコル層の多くをコミットします。
  • RPCは絶対的な権利を提供するtrac例えば、ネットワーク通信のメッセージ伝達という性質は、ユーザーには隠されたままです。
  • RPCは分散環境とローカル環境の両方で使用できます。
  • コードの書き換えと再開発に必要な労力は最小限です。

RPCのデメリット

RPC を使用する場合の短所と欠点は次のとおりです。

  • リモートプロシージャコールでは、パラメータは値のみで渡されます。ポインタ(参照)値は許可されていません。
  • リモートプロシージャコール(および戻り)にかかる時間、つまりオーバーヘッドは、ローカルプロシージャの場合よりも大幅に長くなります。
  • この仕組みは、通信システム、別の機械、そして別のプロセスが関わるため、故障しやすい。
  • RPCの概念は様々な方法で実装できるため、単一の標準規格は存在しない。
  • 主にインタラクションに基づいているため、ハードウェアアーキテクチャの柔軟性には欠ける。
  • リモートプロシージャコールが発生するため、処理コストが増加します。

よくあるご質問

RPCはアクションをリモートプロシージャとして公開するのに対し、RESTはデータをHTTP動詞を介してアクセスされるリソースとして公開します。RPCはローカル関数を呼び出すような感覚ですが、RESTはリソースと状態に重点を置いています。

gRPCは Googleの最新かつ高性能なRPCフレームワーク。HTTP/2とプロトコルを使用します。 Bufferまた、双方向ストリーミングをサポートしているため、マイクロサービス間の通信で人気があります。

RPCには同期と非同期の両方の方式があります。同期呼び出しはサーバーが結果を返すまで処理をブロックしますが、非同期呼び出しはすぐに結果を返し、後で応答を処理します。gRPCなどのフレームワークは、両方の方式をサポートしています。

RPCは、複数のマシン間で動作するIPC(プロセス間通信)の一種です。多くのIPC方式は1つのホスト上でメモリを共有しますが、RPCはネットワークを介してメッセージを交換することで、異なるコンピュータ上のプロセスが連携できるようにします。

一般的な RPC 実装には、gRPC、Apache Thrift、XML-RPC、JSON-RPC、および Java RMI。データ形式や転送方法は異なるものの、いずれもクライアントがリモートサーバー上のプロシージャを呼び出すことができる。

RPCはデフォルトでは安全ではありません。セキュリティはトランスポートに依存します。実装によっては、TLS暗号化、認証トークン、アクセス制御などを追加して呼び出しを保護します。

機械学習プラットフォームは、マイクロサービス間でモデル予測を提供するために、特にgRPCなどのRPCを使用します。クライアントは特徴量を送信し、推論結果を受け取ります。ping AIシステムは高速かつ疎結合である。

はい。GitHub Copilotは、gRPC用の.protoサービス定義、クライアントスタブ、およびサーバーハンドラーを生成できます。ただし、開発者は本番環境にデプロイする前に、生成されたインターフェース、エラー処理、およびバージョン管理を必ず確認してください。