初步认识 RPC 框架 | 青训营

76 阅读4分钟

一、什么是RPC框架

RPC框架(Remote Procedure Call,远程过程调用)是一种计算机通信协议和编程模型,旨在使不同的计算机或进程之间能够像调用本地函数一样调用远程计算机或进程上的函数。它允许开发人员通过网络在分布式系统中进行函数调用,从而隐藏了底层网络通信的细节,使分布式应用程序的开发变得更加简化和高效。

RPC框架的基本思想是,客户端应用程序可以像调用本地函数一样调用远程服务器上的函数,而无需关心网络通信的具体细节。当客户端调用远程函数时,参数被封装并通过网络发送到远程服务器,然后远程服务器执行相应的函数并将结果返回给客户端。这使得分布式系统中的不同组件能够相互协作,就像它们在同一台机器上运行一样。

RPC框架通常涉及以下几个核心组件:

  1. 服务接口定义语言(IDL):IDL是一种用于描述远程函数接口的语言,它定义了函数的名称、参数、返回值等信息。不同的RPC框架可能使用不同的IDL,例如gRPC使用Protocol Buffers,Apache Thrift使用自己的IDL。

  2. Stub和Skeleton:Stub是客户端使用的代理代码,用于将本地函数调用转换为网络调用,并将参数传递给远程服务器。Skeleton是服务器端使用的代理代码,用于接收远程调用并将其分派给相应的本地函数。

  3. 序列化和反序列化:由于数据需要在网络上传输,参数和返回值需要进行序列化(编码为字节流),以便在远程调用之间进行传输。远程服务器将接收到的字节流进行反序列化(解码)以重建参数,并在执行函数后将结果序列化后返回。

  4. 网络通信:RPC框架必须管理网络通信细节,包括建立连接、数据传输、错误处理等。

  5. 协议和传输层:不同的RPC框架可以使用不同的通信协议和传输层,例如HTTP/2、TCP、UDP等,以满足不同的性能和需求。

一些常见的RPC框架包括gRPC、Apache Thrift、Java RMI(远程方法调用)、CORBA(通用对象请求代理体系结构)等。这些框架都帮助开发人员更轻松地构建分布式系统,实现跨网络边界的函数调用。

二、RPC过程

一次完整的RPC(Remote Procedure Call,远程过程调用)过程通常涉及以下步骤:

  1. 接口定义:首先,需要定义远程函数的接口,通常使用服务接口定义语言(IDL)来描述函数的名称、参数和返回值。IDL文件可以包含在客户端和服务器端,以确保双方都了解函数接口。

  2. 客户端调用:客户端应用程序调用本地代理函数(Stub),就像调用本地函数一样。客户端传递参数给代理函数,然后代理函数将这些参数封装并准备发送到远程服务器。

  3. 参数序列化:代理函数将传递的参数序列化为字节流,以便在网络上传输。这通常涉及将数据编码为一种可传输的格式,如二进制、JSON或XML。

  4. 网络通信:序列化后的数据通过网络发送到远程服务器。这涉及建立网络连接、传输数据并处理通信中的错误情况。

  5. 服务器端处理:一旦远程服务器收到请求,服务器端的代理函数(Skeleton)会解析接收到的字节流,并根据请求调用相应的本地函数。

  6. 函数执行:服务器端本地函数执行请求的操作,并计算结果。

  7. 结果序列化:函数执行完成后,服务器将结果序列化为字节流,准备发送回客户端。

  8. 网络通信:序列化后的结果通过网络发送回客户端。

  9. 客户端响应:客户端代理函数接收到结果字节流后,将其解析为实际的结果数据。

  10. 结果返回:客户端本地函数得到解析后的结果,就好像调用了本地函数一样。这个结果可以被应用程序进一步处理和使用。

总结来说,RPC过程涉及客户端和服务器之间的通信,客户端将函数调用请求封装并发送到远程服务器,服务器执行相应的操作并将结果返回给客户端。整个过程通过代理函数和序列化/反序列化技术隐藏了底层网络通信的细节,使得远程函数调用看起来就像是在本地进行的一样。