远程过程调用

分布式计算中,远程过程调用(英语:Remote Procedure CallRPC)是一个电脑通信协议。该协议允许运行于一台电脑的程序调用另一个地址空间(通常为一个开放网络的一台电脑)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。RPC是一种伺服器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行资讯交互的系统。

如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用远程方法调用,例:Java RMI

RPC是一种进程间通信的模式,程序分布在不同的地址空间里。如果在同一主机里,RPC可以通过不同的虚拟地址空间(即便使用相同的物理地址)进行通讯,而在不同的主机间,则通过不同的物理地址进行交互。许多技术(通常是不兼容)都是基于这种概念而实现的。

历史起源

有关RPC的想法至少可以追溯到1976年以“信使报”(Courier)的名义使用。RPC首次在UNIX平台上普及的执行工具程序是SUN公司的RPC(现在叫ONC RPC)。它被用作SUN的NFC的主要部件。ONC RPC今天仍在伺服器上被广泛使用。 另一个早期UNIX平台的工具是“阿波罗”电脑网络计算系统(NCS),它很快就用做OSF的分布计算环境(DCE)中的DCE/RPC的基础,并补充了DCOM

资讯传递

远程过程调用是一个分布式计算客户端-伺服器(Client/Server)的例子,它简单而又广受欢迎。远程过程调用总是由客户端伺服器发出一个执行若干过程请求,并用客户端提供的参数。执行结果将返回给客户端。由于存在各式各样的变体和细节差异,对应地派生了各式远程过程调用协议,而且它们并不互相兼容。

流程

  1. 客户端调用客户端stub(client stub)。这个调用是在本地,并将调用参数push到(stack)中。
  2. 客户端stub(client stub)将这些参数包装,并通过系统调用发送到服务端机器。打包的过程叫 marshalling。(常见方式:XMLJSON、二进制编码)
  3. 客户端本地操作系统发送资讯至伺服器。(可通过自定义TCP协议HTTP传输)
  4. 伺服器系统将资讯传送至服务端stub(server stub)。
  5. 服务端stub(server stub)解析资讯。该过程叫 unmarshalling
  6. 服务端stub(server stub)调用程序,并通过类似的方式返回给客户端。

标准化的沟通机制

为了允许不同的客户端均能访问伺服器,许多标准化的 RPC 系统应运而生了。其中大部分采用接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。

参见