RPC

出典: フリー百科事典『ウィキペディア(Wikipedia)』
2013年7月5日 (金) 23:02時点におけるCharHigh (トーク)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

テンプレート:Infobox RPCテンプレート:Lang-en-short、リモートプロシージャコール)とは、プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチン手続きを実行することを可能にする技術。遠隔手続呼出とも。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。RPCを行うソフトウェアがオブジェクト指向プログラミングに基づく場合、RPC のことを リモート呼び出しremote invocation)あるいは リモートメソッド呼び出しremote method invocationRMI)と呼ぶこともある(Java RMIなど)。

RPCには例えば、ONC RPCDCE/RPCといった互いに非互換な様々な技術が存在する。

起源と歴史

RPCの考え方は、少なくともRFC 707が発表された1976年まで遡る。最初にRPCを商用に実用化したのはゼロックスの「Courier」であり、1981年のことであった。UNIXで最初に広く使われるようになったRPC実装はサン・マイクロシステムズのRPC (ONC RPC) であり、NFSの基盤として使われた。ONC RPCは現在でも広く使われている。

もう一つのUNIXでの初期の実装として、アポロコンピュータNetwork Computing System (NCS) がある。NCSは後にOSFDistributed Computing Environment (DCE) でDCE/RPCの基盤として使われた。その約10年後、マイクロソフトがDCE/RPCを同社のRPC (MSRPC) の基盤として採用し、DCOMの実装に使った。同じころ(1990年代中盤)、継承機構を備えた分散オブジェクトに関するRPCパラダイムとして、パロアルト研究所ILUObject Management GroupCORBAが登場した。

メッセージパッシング

RPCクライアントは、実行する手続きと引数とを要求メッセージとして既知のリモートサーバに送信することで、RPCを開始する。サーバーがRPCを処理している間、クライアント側はブロックされる。サーバー上でメッセージが処理され、応答がクライアントに戻ってくると、クライアント上のプロセスは処理を続行する。

RPCプロトコルの実装によって微妙な違いをもった多くのバリエーションがあり、それらの間には互換性がない。

RPCが通常のローカル呼び出しと比べて違う点で重要なのは、予測できないネットワーク上の問題で失敗することがあるという点である。またそのような場合、手続きが実際に実行されたかどうかをクライアントが知ることができないことがある。そういったケースでは、二重に手続きを実行しても影響のない場合は容易に対処できるが、そうでなければ適切な対処は困難である。そのため、注意深く記述された低レベルなサブシステムの制限下で呼び出しコードを実行するという方法がよくとられる。

標準コンタクト機構

各種クライアントからサーバへのアクセスを可能とするため、いくつかの標準RPCシステムが開発されてきた。それらの多くはインタフェース記述言語 (IDL) を使って各種プラットフォーム間のRPCを可能としている。

IDLファイルはクライアントとサーバ間のインタフェースのためのコードを生成するのに使われる。最も一般的なツールとしてはRPCGENがある。

RPCに類似する概念

  • JavaJava RMI APIは、標準的UNIX RPCとほぼ同等の機能を提供する。
  • XML-RPCは、呼び出しをXMLで符号化し、HTTPを通信プロトコルに使用するRPCプロトコルである。
  • マイクロソフトの.NET Remotingは、Windowsプラットフォーム上に実装された分散システムでのRPC機能を提供するものである。

関連項目

参考文献

  • RFC 1057 - Specifies version 1 of ONC RPC
  • RFC 1831 - Specifies version 2 of ONC RPC
  • Remote Procedure Calls (RPC) A tutorial on ONC RPC by Dr Dave Marshall of Cardiff University

テンプレート:FOLDOC