遠隔手続き呼出し
遠隔手続き呼出し(英: remote procedure call、リモートプロシージャコール、略してRPC)とは、プログラムから別のアドレス空間(通常、共有ネットワーク上の別のコンピュータ上)にあるサブルーチンや手続きを実行することを可能にする技術。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。遠隔手続き呼出しを行うソフトウェアがオブジェクト指向プログラミングに基づく場合、遠隔手続き呼出しのことを リモート呼び出し(英: remote invocation)あるいは リモートメソッド呼び出し (英: remote method invocation、英: RMI)と呼ぶこともある(Java RMIなど)。
遠隔手続き呼出しには例えば、ONC RPCやDCE/RPCといった互いに非互換な様々な技術が存在する。
起源と歴史[編集]
遠隔手続き呼出し (RPC) の考え方は、少なくともRFC 707が発表された1976年まで遡る。最初にRPCを商用に実用化したのはゼロックスの「Courier」であり、1981年のことであった。UNIXで最初に広く使われるようになったRPC実装はサン・マイクロシステムズのRPC (ONC RPC) であり、NFSの基盤として使われた。ONC RPCは現在でも広く使われている。
もう一つのUNIXでの初期の実装として、アポロコンピュータのNetwork Computing System (NCS) がある。NCSは後にOSFのDistributed Computing Environment (DCE) でDCE/RPCの基盤として使われた。その約10年後、マイクロソフトがDCE/RPCを同社のRPC (MSRPC) の基盤として採用し、DCOMの実装に使った。同じころ(1990年代中盤)、継承機構を備えた分散オブジェクトに関するRPCパラダイムとして、パロアルト研究所のILUとObject Management GroupのCORBAが登場した。
メッセージパッシング[編集]
RPCクライアントは、実行する手続きと引数とを要求メッセージとして既知のリモートサーバに送信することで、RPCを開始する。サーバーがRPCを処理している間、クライアント側はブロックされる。サーバー上でメッセージが処理され、応答がクライアントに戻ってくると、クライアント上のプロセスは処理を続行する。
RPCプロトコルの実装によって微妙な違いをもった多くのバリエーションがあり、それらの間には互換性がない。
RPCが通常のローカル呼び出しと比べて違う点で重要なのは、予測できないネットワーク上の問題で失敗することがあるという点である。またそのような場合、手続きが実際に実行されたかどうかをクライアントが知ることができないことがある。そういったケースでは、二重に手続きを実行しても影響のない場合は容易に対処できるが、そうでなければ適切な対処は困難である。そのため、注意深く記述された低レベルなサブシステムの制限下で呼び出しコードを実行するという方法がよくとられる。
標準コンタクト機構[編集]
各種クライアントからサーバへのアクセスを可能とするため、いくつかの標準RPCシステムが開発されてきた。それらの多くはインタフェース記述言語 (IDL) を使って各種プラットフォーム間のRPCを可能としている。
IDLファイルはクライアントとサーバ間のインタフェースのためのコードを生成するのに使われる。最も一般的なツールとしてはRPCGENがある。
遠隔手続き呼出しに類似する概念[編集]
- JavaのJava RMI APIは、標準的UNIX RPCとほぼ同等の機能を提供する。
- XML-RPCは、呼び出しをXMLで符号化し、HTTPを通信プロトコルに使用するRPCプロトコルである。
- マイクロソフトの.NET Remotingは、Windowsプラットフォーム上に実装された分散システムでのRPC機能を提供するものである。
- JSON-RPCは、符号化にJSONを用いる、2000年代後半に制定された非常にシンプルなRPCプロトコルである。
- GoogleのgRPCは、Protocol BuffersとHTTP/2を用いた2010年代のWeb技術によるRPCである。
関連項目[編集]
- SOAP
- HTTP
- ODBC
- Webサービス
- Applet
- Servlet
- Samba
- WebDAV
- ピア・ツー・ピア
- JRES - Java Remote Execution Service is a RPC protocol that uses SSL style encode mechanism to encode its calls and pure HTTP as a transport mechanism.
参考文献[編集]
- 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
この記事は2008年11月1日までGFDLバージョン1.3以降の再ライセンス規約に基づいていたFree On-line Dictionary of Computingにある項目の資料が元になっている。