这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
一、RPC 框架分层设计重点内容
- 基本概念
- 分层设计
- 关键指标
- 企业实践
这节课主要是感觉自己对于RPC还不是特别了解,所以去看了一下后端入门 - Go 框架设计与实现
二、详细内容
-
基本概念
在引入远程函数调用概念之前(RPC)介绍了本地函数调用。本地函数调用大致分为压栈参数,处理(计算等),返回结果(压栈返回),从栈中取出结果。类似地,RPC需要调用服务端的方法进行处理,所以它要解决以下问题:
- 函数映射
- 数据转化为字节流
- 网络传输
RPC概念模型如图:
- IDL文件
- 生成代码
- 编解码
- 通信协议
- 网络传输
- 分层设计——以Apache Thrift为例 结构如图:
核心为编解码层,协议层,网络层(后面两层参考计算机网络也许也行)。
编解码层主要是可以使得服务端或者客户端使用IDL文件生成语言对应的静态库,从内存中表示到字节序列的转换称为编码,反之为解码,也常叫做序列化和反序列化。二进制编码,指将数据转换成二进制流(实现方式有tlv编码等)具备跨语言和高性能等优点。其他两层记录下感兴趣的点,网络层的性能主要考虑应用层buffer 减少copy,具备高性能定时器、对象池等特点。
-
关键指标
-
稳定性,可以通过注册中间件实现以下:
-
熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
-
限流:保护被调用方,防止大流量把服务压垮
-
超时控制:避免浪费资源在不可用节点上
-
负载均衡(不至于其中一个服务压力过大而崩溃,从而提高成功率)
-
易用性,开箱即用,周边工具完善
-
扩展性强,可以注册各种中间件
-
观测性,可以使用Log、Metric、Tracing或者内置观测性服务
-