推奨されます, 2024

エディターズチョイス

RPCとRMIの違い

RPCとRMIは、クライアントとサーバー間の通信を確立することによって、クライアントがサーバーからプロシージャーまたはメソッドを呼び出すことを可能にするメカニズムです。 RPCとRMIの共通の違いは、RPCは手続き型プログラミングのみをサポートし、RMIはオブジェクト指向プログラミングをサポートすることです。

この2つの大きな違いは、リモートプロシージャコールに渡されるパラメータが通常のデータ構造で構成されていることです。 一方、リモートメソッドに渡されるパラメータはオブジェクトで構成されています

比較表

比較基準RPCRMI
サポート手続き型プログラミング
オブジェクト指向プログラミング
パラメーター通常のデータ構造はリモートプロシージャに渡されます。オブジェクトはリモートメソッドに渡されます。
効率RMIより低いRPC以上のもので、最新のプログラミング手法(つまりオブジェクト指向のパラダイム)によってサポートされている
経費もっと
比較的少ない
入出力パラメータは必須です。はい必ずしも
プログラミングのしやすさの提供
高い
低い

RPCの定義

リモートプロシージャコール(RPC)は、分散コンピューティング用に考案され、 ローカルプロシージャコールのセマンティクスに基づいて考案されたプログラミング言語機能です。 これはリモートサービスの最も一般的な形式であり、ネットワークを介して接続されたシステム間で使用するプロシージャコールメカニズムを抽象化する方法として設計されました。 これは、オペレーティングシステムがプロセスが共有データを管理し、異なるプロセスが別々のシステムで実行されており、必然的にメッセージベースの通信を必要とする環境を扱うことを可能にするIPCメカニズムに似ています。

与えられた手順でRPCがどのように実装されるかを理解しましょう。

  • クライアントプロセスはパラメータを使用してクライアントスタブを呼び出し、呼び出しが完了するまでその実行は中断されます。
  • その後、パラメータは、クライアントスタブを介してマーシャリングすることによって、マシンに依存しない形式に変換されます。 その後、パラメータの表現を含むメッセージが準備されます。
  • サイトの識別情報を見つけるために、クライアントスタブはリモートプロシージャが存在するネームサーバと相互通信します。
  • ブロッキングプロトコルを使用して、クライアントスタブはリモートプロシージャコールが存在するサイトにメッセージを送信します。 この手順は、応答があるまでクライアントスタブを停止します。
  • サーバーサイトは、クライアント側から送信されたメッセージを受信し、それをマシン固有の形式に変換します。
  • サーバースタブはパラメータとともにサーバープロシージャの呼び出しを実行し、サーバースタブはプロシージャが完了するまで中断されます。
  • サーバープロシージャは生成された結果をサーバースタブに返し、結果はサーバースタブでマシンに依存しない形式に変換され、結果を含むメッセージを作成します。
  • 結果メッセージはクライアントスタブに送信され、クライアントスタブに適したマシン固有のフォーマットに変換されます。
  • 最後のクライアントでは、スタブは結果をクライアントプロセスに返します。

RMIの定義

Remote Method Invocation(RMI)はRPCに似ていますが、言語固有であり、Javaの機能です。 スレッドは、リモートオブジェクトのメソッドを呼び出すことを許可されています。 クライアント側とサーバー側の透明性を維持するために、スタブとスケルトンを使用してリモートオブジェクトを実装します。 スタブはクライアントに常駐し、リモートオブジェクトに対してはプロキシとして動作します。

クライアントがリモートメソッドを呼び出すと、そのリモートメソッドのスタブが呼び出されます。 クライアントスタブは、メソッドの名前と整列化されたパラメータを含むパーセルの作成と送信を担当し、スケルトンはパーセルの受信を担当します。

スケルトンはパラメータを非整列化し、サーバー上の目的のメソッドを呼び出します。 スケルトンは、指定された値(または例外)をパーセルとともに整列化し、それをクライアントスタブに送信します。 スタブは返品小包を組み立て直してクライアントに送信します。

Javaでは、パラメータはメソッドに渡され、参照の形で返されます。 すべてのオブジェクトがリモートメソッドであるとは限らないので、これはRMIサービスにとって面倒なことになるでしょう。 そのため、参照として渡すことができるものとできないものを判別する必要があります。

Javaは、オブジェクトが値として渡されるシリアライゼーションという名前のプロセスを使用します。 リモートオブジェクトは、値渡しによってローカライズされます。 スタブクラスのURLとともにオブジェクトへのリモート参照を渡すことで、参照によってオブジェクトを渡すこともできます。 参照渡しは、リモートオブジェクトのスタブを制限します。

RPCとRMIの主な違い

  1. RPCは手続き型プログラミングのパラダイムをサポートしているためCベースですが、RMIはオブジェクト指向プログラミングのパラダイムをサポートしており、Javaベースです。
  2. RPCでリモートプロシージャに渡されるパラメータは通常のデータ構造です。 反対に、RMIはオブジェクトをリモートメソッドへのパラメータとして転送します。
  3. RPCは古いバージョンのRMIと見なすことができ、手続き型プログラミングをサポートするプログラミング言語で使用されています。また、値渡しメソッドのみを使用できます。 それとは対照的に、RMI機能は最新のプログラミング手法に基づいて考案されています。 RMIのもう1つの利点は、参照によって渡されるパラメータを変更できることです。
  4. RPCプロトコルはRMIよりも多くのオーバーヘッドを生成します。
  5. RPCに渡されるパラメータは「入出力」 である必要があります。つまり、プロシージャに渡される値と出力値は同じデータ型を持つ必要があります。 これとは対照的に、RMIで「入出力」パラメータを渡す必要はありません。
  6. RPCでは、2つのプロセスが別々のアドレス空間を持っているので参照は起こり得ませんが、RMIの場合は可能です。

結論

RPCとRMIは同じ目的を果たしますが、異なるプログラミングパラダイムをサポートする言語で使用されるため、異なる機能があります。

Top