这是我参与「第五届青训营 」笔记创作活动的第14天
RPC需要解决的问题
基本概念
1.函数映射
2.数据转换成字节流
3.网络传输
RPC基本概念
IDL文件
通过一种中立的方式来描述接口,使得不同平台上运行的对象和不同语言编写的程序可以互相通信。
生成代码:通过编译器工具把IDL文件转换成语言对应的静态库
编解码:从内存表示到字节序列的转换称为编码,反之为解码,序列化and反序列化
通信协议:规范了数据在网络中的传输内容和格式,除必须的请求/响应数据外,还包含额外的元数据。
网络传输:通常基于成熟的网络库走TCP/UDP传输
RPC好处
- 单一职责,利于分工协作和运维开发
- 可扩展性强,资源使用率更高
- 故障隔离
RPC问题
- 服务宕机
- 网络异常
- 请求量突增
这些问题可以交给RPC框架来处理
分层设计
编解码层|协议层|网络通信层
协议层
特殊结束符:一个特殊字符作为每个协议单元结束的标识
变长协议:以定长加不定长的部分组成,其中定长部分需要描述不定长的内容长度
关键指标
熔断:保护调用方,防止被调用的服务出现问题影响整个链路
限流:保护被调用方,防止大流量压垮服务
超时控制:避免浪费资源在不可用节点上
稳定性 -
请求成功率
负载均衡
重试
长尾请求
注册中间件
易用性
开箱即用 周边工具 支持protobuf和thrift
扩展性
中间件、Option、编解码层、协议层、网络传输层、代码生成工具插件扩展
观测性
内置观测服务
高性能
高吞吐
低延迟
微服务过微问题:传输和序列化开销越来越大
策略:将亲和性强的服务实例尽可能调度到同一个物理机,远程PRPC调用优化为本地IPC调用。