RPC | 青训营

78 阅读4分钟

一、RPC的原理 RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,用于实现分布式系统中不同计算机之间的通信。它使得像调用本地方法一样调用位于不同计算机上的方法,隐藏了底层网络通信的复杂性,让分布式系统的开发更加方便和可维护。

RPC 的基本思想是,一个计算机上的程序可以像调用本地函数一样调用另一个计算机上的函数,而不需要显式地处理网络通信。远程调用的参数和返回值在不同计算机之间进行序列化和反序列化,以便在网络上传输。

RPC 协议通常包括以下关键概念:

  1. Stub(存根): Stub 是客户端程序用于调用远程方法的本地代理。它在客户端上提供了与远程服务相同的接口,使得客户端代码可以像调用本地方法一样调用远程方法。
  2. Marshalling(序列化): 在 RPC 中,参数和返回值需要在客户端和服务器之间进行序列化(编码为字节流)和反序列化(解码为数据)。这是为了将数据从一种语言或格式转换为另一种,以便在网络上传输。
  3. Transport(传输): 传输层负责在客户端和服务器之间传输序列化的数据。这可以基于多种传输协议,如 HTTP、TCP、UDP 等。
  4. Unmarshalling(反序列化): 在接收方(通常是服务器端)对传输的数据进行解码,将其还原为可供代码处理的参数和返回值。
  5. Interface Definition(接口定义): 定义远程方法的接口,包括方法名、参数和返回值类型等信息。通常使用IDL(Interface Definition Language)来描述接口。

常见的 RPC 框架有 gRPC、Apache Thrift、Java RMI(Remote Method Invocation)等。这些框架提供了通信协议、序列化、Stub 生成等功能,使得开发人员可以方便地构建跨网络的分布式系统。

总之,RPC 是一种实现分布式系统中跨计算机调用方法的技术,通过隐藏底层通信细节,使开发人员能够更容易地构建可扩展、高效的分布式应用程序。

二、RPC的框架 RPC(Remote Procedure Call,远程过程调用)协议通常涉及多个不同的层次,以确保有效的远程通信。这些层次通常包括:

  1. 应用层: 应用层是最上层的层次,它定义了远程调用的接口、参数和返回值的结构。在这个层次,你定义了要通过RPC调用的方法、函数或服务的签名。这也是开发人员主要关注的层次。
  2. IDL(Interface Definition Language)层: 这个层次是在应用层和传输层之间的抽象层。它定义了接口和数据结构的规范,确保不同编程语言和平台之间的互操作性。通常使用IDL来描述远程调用的接口,例如定义方法名、参数、返回值等。
  3. 编码/解码层: 在客户端和服务器之间传输数据需要进行编码(序列化)和解码(反序列化)。这个层次将接口定义转换为实际的数据流,以便在网络上传输。不同的RPC框架可能使用不同的编码和序列化方式,如protobuf、JSON、XML等。
  4. 传输层: 这是RPC协议的底层,负责在客户端和服务器之间传输编码后的数据。传输层可以基于不同的协议,如HTTP、TCP、UDP等。它管理数据的分割、传输和重新组装。
  5. 网络层: 网络层负责数据包的路由、传输和处理。它处理数据在不同网络节点之间的传输,确保数据能够在源和目标之间传递。

不同的RPC框架可能在协议层次上有所不同,但通常会涵盖类似的概念。框架可以在不同的层次提供抽象和功能,以使远程调用更加方便、高效和可靠。