深入浅出RPC框架 | 青训营

71 阅读3分钟

深入浅出RPC框架

一、什么是RPC?

  • RPC (Remote Procedure Call)即远程过程调用,是分布式系统常见的一种通信方法。就是从一台客户端上通过参数传递的方式调用另一台服务器上的一个函数或方法,并得到返回的结果。
  • RPC会隐藏底层的通讯细节(不需要直接处理Socket通信或Http通讯)。
  • 客户端发起请求,服务端返回响应,RPC在使用形式上像调用本地函数一样去调用远程的函数

二、RPC的核心功能

  1. 客户端(Client) :服务调用方。
  2. 客户端存根(Client Stub):存放服务端地址信息,将客户端的请求参数数据信息打包成网络消息,再通过网络传输发送给服务端。
  3. 服务端存根(Server Stub):接收客户端发送过来的请求消息并进行解包,然后再调用本地服务进行处理。
  4. 服务端(Server) :服务的真正提供者。
  5. 网络传输模块(Network Service):底层传输,可以是TCP或HTTP。

三、RPC调用流程

RPC框架包含三个最重要的组件,分别是客户端、服务端和注册中心。在一次RPC调用流程中,这三个组件是这样交互的:

  • 服务端在启动后,会将它提供的服务列表发布到注册中心,客户端向注册中心订阅服务地址;
  • 客户端会通过本地代理模块Proxy调用服务端,Proxy模块收到负责将方法、参数等数据转化成网络字节流;
  • 客户端从服务列表中选取其中一个的服务地址,并将数据通过网络发送给服务端;
  • 服务端接收到数据后进行解码,得到请求信息;
  • 服务端根据解码后的请求信息调用对应的服务,然后将调用结果返回给客户端。
  • 虽然RPC调用流程很容易理解,但是实现一个完整的RPC框架设计到很多内容,例如服务注册与发现、通信协议与序列化、负载均衡、动态代理等,下面我们一一进行初步地讲解。

四、RPC调用方法

  • Sync同步调用。客户端线程发起RPC调用后,当前线程会一直阻塞,直至服务端返回结果或者处理超时异常。Sync同步调用一般是RPC框架默认的调用方式,为了保证系统可用性,客户端设置合理的超时时间是非常重要的。虽说Sync是同步调用,但是客户端线程和服务端线程并不是同一个线程,实际在RPC框架内部还是异步处理的。
  • Future 异步调用。客户端发起调用后不会再阻塞等待,而是拿到RPC框架返回的Future对象,调用结果会被服务端缓存,客户端自行决定后续何时获取返回结果。当客户端主动获取结果时,该过程是阻塞等待的。
  • Callback回调调用。如下图所示,客户端发起调用时,将Callback对象传递给RPC框架,无须同步等待返回结果,直接返回。当获取到服务端响应结果或者超时异常后,再执行用户注册的Callback回调。所以Callback接口一般包含onResponse和onException两个方法,分别对应成功返回和异常返回两种情况。
  • Oneway单向调用。客户端发起请求之后直接返回,忽略返回结果。