这是我参与「第五届青训营 」笔记创作活动的第10天。
RPC框架
基本概念
远程函数调用
(Remote Procedure Calls)远程函数调用需要解决的问题:
- 函数映射
- 数据转化为字节流
- 网络传输
RPC概念模型
一次RPC过程
- IDL文件:通过一种中立的方式描述接口,使其在不同平台上运行的对象和用不同语言编写的程序可以相互通信。
- 生成代码:通过编译工具把IDL文件编译为对应语言的静态库。
- 编码解码
- 通讯协议:规范传输数据的内容格式
- 网络传输:通常是TCP/UDP
RPC作用
- 单一职责,有利于分工协作和运维开发
- 可扩展性强,资源利用率更优
- 故障隔离,服务可靠性更高
分层设计
编解码层 - 生成代码
编解码层 - 选型
- 兼容性
支持生成新的字段而不影响老的服务,提高灵活度 - 通用性
跨语言跨平台 - 性能
数据大小和处理时长
协议层
规范传输数据的内容格式
协议构造:
协议解析
将数据读取后,按照协议规定解析,读取协议类型、编码方式后开始解码,得到合适的信息
网络通信层
一般利用成熟的网络库:
- 提供易用API封装底层socket
- 支持TCP\UDP协议
- 性能较高
构建RPC关键指标
稳定性、易用性、扩展性、观测性、性能五个方面。
稳定性
熔断、限流、超时保护调用方和被调用方,避免资源堆积在不需要的地方。另外要保证请求成功率,需要实现负载均衡、失败重试等保证成功率。注册中间件实现功能。
易用性
- 开箱即用
提供合理的默认参数配置、丰富文档 - 周边工具
生成代码工具、脚手架工具
扩展性
提供足够多的扩展点,包括注册中间件、支持多种协议、多种网络库、插件扩展等。
观测性
日志、监控面板、链路跟踪... ...
为使用者提供观测方式
性能
高吞吐、低延迟
可以采取连接池、多路复用、高性能编解码协议、高性能网络库等方式实现。
小结
本节课程介绍了RPC的基本原理与一些关键指标细节,介绍了kitex框架便利RPC开发。