这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
rpc需要解决的问题
- 函数映射
- 数据转换成字节流
- 网络传输
一次rpc的过程
RPC中的一些概念
IDL
接口定义语言,用于描述接口,使得不同平台上运行的对象和不同语言编写的程序可以互相通信
生成代码
通过编译工具吧IDL文件转换成语言对应的静态库
编解码
从内存中表示到字节序列的转换成为编码,反之是解码
通信协议
规范了数据在网络中的传输内容和格式。除了必须的的请求和响应数据外,通常包括额外的元数据
网络传输
通常基于成熟的网络库,TCP/UDP
RPC的好处
- 单一职责
- 可扩展性强,资源使用率更高
- 故障隔离,服务整体可靠性更好
RPC带来的问题(RPC框架可以解决)
- 服务宕机,调用方该如何处理
- 调用过程中网络出现异常,如何保证消息可达?
- 请求量突增,导致服务无法及时处理该怎么办?
RPC架构的分层设计
1. 编解码层
通过代码生成工具把IDL文件转换成不同语言对应的库,其中封装了编解码逻辑。
2. 协议层
定义数据传输的包头
3. 网络通信层
选择使用TCP或者UDP传输数据
RPC框架的指标
1. 稳定性
保障策略
- 熔断:保护调用方,防止被调用的服务出现问题,而影响整个链路
- 限流:保护被调用方,防止大流量把服务压垮
- 超时控制:避免浪费资源在不可用节点上 请求成功率
- 负载均衡
- 重试 实现方式:注册中间件
2. 易用性
开箱即用,有生成代码工具,脚手架工具
3. 扩展性
中间件,Option,编解码,协议层,网络传输,代码生成工具插件
4. 观测性
log,metric,tracing,内置观测服务
5. 高性能
通过连接池,多路复用,高性能编解码协议,高性能网络库实现高吞吐,低延迟