深入浅出 RPC 框架 | 青训营笔记
这是我参与「第五届青训营」笔记创作活动的第12天。
基本概念
RPC 要解决的问题:函数映射、数据转换为字节流、网络传输。
一次完整的 RPC 过程
IDL文件:相比本地函数调用,远程调用我们不知道对方有什么方法以及参数长什么样,所以需要一种中立的方式来描述接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信。
生成代码:通过编译器工具把 IDL 文件转换成语言对应的静态库。
编解码:从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化。
通信协议:规范了数据在网络中的传输内容和格式。除必须的请求/响应数据外,通常还会包含额外的元数据。
网络传输:通常基于成熟的网络库走 TCP/UDP 传输。
RPC好处:
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源使用率更优
- 故障隔离,服务的整体可靠性更高
分层设计
RPC 一般使用分层设计,分为 编解码层、协议层、网络通信层。
编解码层主要就是使用 IDL 文件生成不同的编码,并且进行解码。主要使用二进制编码(TLV编码)。
协议层的协议构造如下图:
网络通信层主要使用 socket 的相关 api。
关键指标
选择一个RPC框架主要有下列指标:
- 稳定性
- 易用性
- 扩展性
- 观测性
- 高性能(高吞吐,低延迟)
企业实践
Kitex 的系统框架图如下: