GO语言学习16 | 青训营笔记

101 阅读2分钟

什么是RPC

RPC是指远程过程调用,是Remote Procedure Call三个单词的缩写,功能就是本地的函数一样去调远程函数,远程一般是指通过网络从远程计算机程序上请求服务,也可以在在宿主机下通过网络进行不同架构下的互相请求服务。

在分布式或者微服务架构上非常常用,RPC让不同服务之间的服务调用像本地调用一样简单高效,RPC是一种网络协议,是一种规范,每个大厂几乎都有自己研发的RPC协议。

RPC采用client-server结构,通过request-response消息模式实现,如果服务器的程序进行了更新,那么客户端方面也需要同步更新才能正常使用。

为什么要用RPC

为什么有了HTTP还需要RPC呢?RPC那么负载为什么不用HTTP请求,使用RESTful规范来进行服务调用请求,rpc其实是包含HTTP协议的,RPC协议通常包含传输协议和序列化协议,RPC主要是为了解决特定问题或者节约成本的角度出发的。

Google有一个著名的GRPC协议。GRPC底层就是HTTP2协议,因为http1包含了太多没用的信息,很浪费网络资源。因此大厂一般都会根据自己的系统架构自定义RPC协议,但是缺点就是缺乏灵活性。序列化协议常见的有json,protobuf,xml。

RPC的三个过程

  • 通讯协议
  • 寻址
  • 数据序列化

RPC的流程

  • 客户端处理过程中调用client stub,传入参数
  • Client stub将参数编组为消息,然后通过系统调用向服务端发送消息
  • 客户端本地操作系统将消息从客户端机器发送到服务端机器
  • 服务端操作系统将接收到的数据包传递给client stub
  • server stub解组消息为参数
  • server stub再调用服务端的过程,过程执行结果以反方向的相同步骤相应给客户端。