RPC (Remote Procedure Call Protocol) はリモート プロシージャ コール プロトコルであり、呼び出しの詳細を意識することなく、ローカル サービスを呼び出すようにリモート サービスを呼び出すことができます。テキスト形式はバイナリで、ネットワーク プロトコルは TCP/HTTP/HTTP2 です。
RPC はプロトコルであり、代表的な RPC フレームワークには、Dubbo、Thrift、GPRC、Hetty などがあります。
RPC の主な役割:
- RPC サーバー: プロバイダー、サービスを公開するサービスプロバイダー
- RPC クライアント: コンシューマ、リモート サービスを呼び出すサービス コンシューマ
- レジストリ: サービスの登録と検出のための登録センター、サービス登録センター
RPC 実装の鍵:
コール ID マッピング: どの関数を登録センターに呼び出す必要があるか。すべての関数は、リモートで呼び出すときにクライアントに付加される独自の一意の ID を持つ必要があり、関数とコール ID の間の対応するテーブルが必要です。
シリアル化と逆シリアル化: クライアントとサーバーの間でパラメーターを渡す問題。
データ ネットワーク送信: リモート通話機会ネットワーク接続、データ ニーズ ネットワーク送信、GPRC の場合は HTTP2、Java の場合は Netty。
RPC の主なコンポーネント:
- クライアント (クライアント)、サービスの呼び出し元。
- クライアント スタブはサーバーのアドレス情報を格納し、クライアントの要求パラメーターをネットワーク メッセージにパックして、ネットワークを介してリモートのサーバーに送信します。
- サーバー (サーバー)、実際のサービスプロバイダー。
- サーバー スタブ (サーバー スタブ) は、クライアントから送信されたメッセージを受信し、メッセージを解凍し、ローカル メソッドを呼び出します。
- 基盤となるネットワーク トランスポート (ネットワーク サービス) (TCP または HTTP)
RPCフレームワーク呼び出し処理
- クライアントクライアントは、ローカルに呼び出すことによってリモート インターフェイス サービスを呼び出します。
- 通話を受信した後、クライアント スタブは通話情報オブジェクトをシリアル化し、ネットワーク送信用のバイナリ メッセージ本文に組み立てます。
- クライアントクライアントは、ソケットを介してリモートサーバーにメッセージを送信します。
- サーバー スタブはメッセージを受信すると、ネットワーク情報オブジェクトを逆シリアル化してデコードします。
- サーバー スタブは、デコード結果に従ってサーバーのローカル インターフェイス サービスを呼び出します。
- ローカルインタフェースサービスが実行され、処理結果がサーバスタブに返されます。
- サーバー スタブ サーバー スタブは、返された結果オブジェクトをシリアル化し、それをメッセージ本文に組み立てます。
- 次に、サーバーはソケットを通じてメッセージをクライアントに送信します。
- 結果メッセージを受信した後、クライアント スタブはネットワーク情報オブジェクトをシリアル化してデコードします。
- クライアントクライアントは、最終的なインターフェイス処理結果を取得します。