深入浅出RPC框架 | 青训营笔记

53 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天

深入浅出RPC框架

关于RPC(RPC-Remote Procedure Calls 远程函数调用)框架,在之前的课程中已经学习过部分内容,主要的思想就是将本地函数转换为远程的函数来进行调用,例如字节跳动的kitex框架。总的来说,RPC采用分布式的结构,将不同的服务分到各个不同的服务器,业务更加细化的同时结构也更加复杂。

RPC基本概念

函数调用

要将函数从本地调用转换为远程调用,我们需要解决以下问题:

  1. 函数映射问题

本地调用时,我们调用函数直接使用函数名加参数即可,编译器会自动帮助我们寻找相应的函数指针,但是远程调用时我们无法使用函数指针,因为两个进程的地址空间是完全不同的。

  1. 输入参数问题

如何把函数的参数值传递给服务端,本地调用中,参数压到栈中,然后让函数自己读取,在远程过程调用中,客户端服务器端是不同的进程,不能通过内存来传递参数。需要客户端把参数转换成字节流,传给服务器端,服务器端再把字节流转换成能读取的格式进行处理。

  1. 网络传输问题

使用什么样的传输协议进行数据的传输

概念模型

概念模型.PNG RPC概念模型分为五个部分:User, User-stub RPCRuntime, Server-stub, Server,User输入参数进行调用,User-stub进行打包,数据通过RPCRuntime发送,经由网络进行传输,抵达服务端机器进行解包和调用。

完整的RPC过程

一次完整的RPC过程有以下部分组成:

  1. 通过IDL文件描述接口,如Thrift, Protobuf等
  2. 通过编译器将IDL文件转换成静态库
  3. 将内存数据编码为字节序列
  4. 通信协议传输请求和响应
  5. 传输层走TCP/UDP协议