(一)分布式RPC框架

懒驴 2021年11月30日 343次浏览

RPC的定义

RPC(Remote Procedure Call,远程过程调用)是一种进程间的通信方式。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不是程序员式地编码远程调用的细节,即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。目前,主流的平台都支持各种远程调用技术,以满足分布式系统架构中不同系统之间的远程通信和相互调用。

RPC核心组件

完整的ROC框架主要包含四个核心组件:Client、Server、Client Stub以及Server Stub。

  • 客户端(Client):服务调用方。
  • 服务端(Server):服务提供者。
  • 客户端存根(Client Stub):存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
  • 服务端存根(Server Stub):接收客户端发送过来的消息,将消息解包,并调用本地的方法。

RPC核心组件图

RPC调用过程

RPC调用过程

  1. 客户端(Client)以本地调用方式调用服务(依赖服务接口,以接口方式调用)。
  2. 客户端存根(Client Stub)接收到调用请求后,负责将方法、参数等组装成能够进行网络传输的消息体(将消息体对象序列化为二进制)。
  3. 客户端通过Socket将消息发送给服务端。
  4. 服务端存根(Server Stub)收到消息后对消息进行解码(将消息对象发序列化)。
  5. 服务端存根(Server Stub)根据解码结果调用本地的服务(利用发射原理)。
  6. 本地服务执行并将结果返回给服务端存根(Server Stub)。
  7. 服务端存根将返回结果打包成消息(将结果消息对象序列化)。
  8. 服务端(Server)通过Socket将消息发送到客户端。
  9. 客户端存根(Client Stub)接收到结果消息,并进行解码(将结果消息反序列化)。
  10. 客户端(Client)得到最终结果。

无论是哪种类型的数据,最终都需要转换成二进制流在网络上进行传输,数据的发送方需要将对象转换为二进制流,而数据的接收方则需要把二进制流在恢复为对象。而RPC的目标是把2,3,4,7,8,9这些步骤都封装起来的。
RPC框架原理图

以上就是对分布式RPC框架的简单介绍,将会持续学习更新相关的内容!