远程过程调用RPC

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

  • 在采用C等古老语言编程的时候,RPC被称作了对S端的“子程序”的调用,所以称“过程调用”。在面向对象编程出现后,RPC也可以称为远程方法调用(RemoteMethodInvocation),或者远程调用(RemoteInvocation)例:Java RMI

  • 分布式计算中,远程过程调用(英语:Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。

  • RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

  • RPC过程可以是同步的,也可以是异步的。
    同步方式:C端向S端发送请求,阻塞等待;S端执行一段子程序,发送响应;C端继续执行;
    异步方式,比如XHTTP调用。

信息传递

远程过程调用是一个分布式计算客户端-服务器(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)调用程序,并通过类似的方式返回给客户端。

Stub

Stub是一段代码,用来转换RPC过程中传递的参数。处理内容包括不同OS之间的大小端问题。另外,Client端一般叫Stub,Server端一般叫Skeleton。

生产方式:1)手动生成,比较麻烦;2)自动生成,使用IDL(InterfaceDescriptionLanguate),定义C/S的接口。

交互机制标准:一般采用IDL,生成IDL的工具 RPCGEN()

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

RPC框架

  • Thrift

参考

  • 转载
  1. 远程过程调用 - 维基百科,自由的百科全书 (wikipedia.org)
  2. 什么是RPC?RPC与Stub简述_rpc stub_wwj-jww的博客-CSDN博客