这是我参与「第五届青训营 」伴学笔记活动十五天。
RPC
基本概念
- 相比本地函数调用,RPC调用需要解决的问题(使用ip+port 或者是 DNS 不能满足微服务所需的远程函数调用)
- 函数映射 使用ip+端口提供的端口数量有限
- 数据换成字节流
- 网络传输
- 一次完整的调用过程
- RPC问题
- 服务宕机如何感知?
- 网络异常如何应对
- 请求暴增怎么处理
- 概念模型
- user
- user-stub
- rpc-runtime
- server-stub
- server‘
- IDL (interface definition language)文件
- thrift
- protobuf
- 生成代码
- 编解码(序列化、反序列化)
- 通信协议
- 应用层协议
- 二进制流的传输
- 应用层协议
- 网络通信
- IO网络模型
- blocking IO
- unblocking IO
- IO mutiplexing
- signal driven IO
- asynchronous IO
- 传输层协议
- TCP
- UDP
- IO网络模型
RPC框架分层设计
- 编解码层
- 数据格式
- 语言特定格式 java.io
- 文本格式 json XML CSV
- 二进制编码
- TLV编码:thrift使用TLV编码
- Varint编码:protobuf使用varint编码
- 选项
- 兼容性
- 通用型
- 性能
- 空间开销
- 时间开销
- 传输协议层
- 消息切分
- 特殊结束符
- 变长协议:length+body
- 协议构造
- thrift header协议
- 消息切分
- 网络通信层
- IO
- 阻塞:浪费线程
- 非阻塞:浪费CPU
- 网络库
- 核心指标
- 吞吐高
- 延迟低
- IO
- 数据格式
PRC框架的核心指标
- 稳定性
- 保障策略
- 熔断
- 限流
- 超时
- 三者是一种服务降级手段
- 请求成功率
- 负载均衡
- 重试
- 长尾请求
- backrequest
- 保障策略
- 易用性
- 开箱即用
- 合理默认的参数选项、丰富的文档
- 周边工具
- 生成代码工具、脚手架工具
- 开箱即用
- 扩展性
- 观测性
- LOG
- metric
- tracing
- 内置观测性服务
- 当前环境变量
- 配置参数
- 缓存信息
- 内置pprof用于排查问题
- 高性能
- 连接池和多路复用
- 高性能编解码协议
- 高翔能网络库
总结
RPC在我看来,是在大量服务端内部功能调用的时候,遇到了传统通信协议不能满足其性而量身定制的通讯协议组件。