什么是RPC

    RPC全称 (Remote Procedure Call)——远程过程调用。在学校学编程,我们写一个函数都是在本地调用就行了。但是在互联网公司,服务都是部署在不同服务器上的分布式系统,如何调用呢?

    RPC技术简单说就是为了解决远程调用服务的一种技术,使得调用者像调用本地服务一样方便透明。

    下图是客户端调用远端服务的过程:

    RPC概念 - 图1

    1)客户端client发起服务调用请求。
    2)clientstub可以理解成一个代理,会将调用方法、参数按照一定格式进行封装,通过服务提供的地址,发起网络请求。
    3)消息通过网络传输到服务端。
    4)serverstub接受来自socket的消息
    5)serverstub将消息进行解包、告诉服务端调用的哪个服务,参数是什么
    6)结果返回给serverstub
    7)severstub把结果进行打包交给socket
    8)socket通过网络传输消息
    9)clientslub从socket拿到消息
    10)clientstub解包消息将结果返回给client。

    一个RPC框架就是把步骤2到9都封装起来。

    为什么需要RPC

    1、首先要明确一点:RPC可以用HTTP协议实现。RPC可以直接建立在tcp之上,也可以建立在http协议之上。对于rpc来说,这都是一样的,只要把通讯的内容塞进不同的报文里好了。其实http是最常用的承载RPC的通信协议之一。而且我们可以在http 上传输xml和json这样的文本协议,也可以是protobuf和thrift这样的二进制协议,这都不是问题。大家常用的REST api就可以很好的封装成rpc。但是互联网公司往往用自己的私有协议,比如鹅厂的JCE协议,私有协议不具备通用性为什么还要用呢?因为相比于HTTP协议,RPC采用二进制字节码传输,更加高效也更加安全。

    2、现在业界提倡“微服务“的概念,而服务之间通信目前有两种方式,RPC就是其中一种。RPC可以保证不同服务之间的互相调用。即使是跨语言跨平台也不是问题,让构建分布式系统更加容易。