RPC, stands for Remote Procedure Call(远程过程调用)
通俗一点 两台服务器 每个部署一个应用、如果部署在A服务器上的应用A想调用B服务器上部署的服务B的函数,但是两者不在一个内存空间内,如何调用呢?

这就带来了RPC。
这解决了下面几个问题:

  1. 如何告诉我们用调用某个特定函数呢?用callID映射
  2. 客户端如何传递参数给远程函数?把参数序列化和反序列化在网络间传输。
  3. 网路传输协议:大部分RPC框架用TCP协议,而gRPC则用了Http2.

RPC的简要原理:

浏览器中rpc的调用_rpc

服务消费方(client)调用以本地调用方式调用服务;client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;client stub找到服务地址,并将消息发送到服务端;server stub收到消息后进行解码;server stub根据解码结果调用本地的服务;本地服务执行并将结果返回给server stub;server stub将返回结果打包成消息并发送至消费方;client stub接收到消息,并进行解码;服务消费方得到最终结果。

工业界常用RPC框架:
duboo, gRPC, Hessian.

RPC和HTTP的关系?
这两者并不是同一层级的概念。RPC更像是一种设计思想,用于解决两个不同服务之间调用的问题。
一般的RPC框架都会包含有传输协议和序列化协议。
而HTTP就是传输协议的一种。可以被PRC框架使用。当然这个框架也能使用TCP。不同的协议适应不同的场景。
RPC 的 TCP 方式主要用于公司内部的服务调用,性能消耗低,传输效率高。HTTP主要用于对外的异构环境,浏览器接口调用,APP接口调用,第三方接口调用等。

总结一下:RPC 实际上就是一种远程调用的解决思想。他能解决不同服务之间调用比较慢的问题(比如直接restful API 基于HTTP call)