这是我参与「第五届青训营 」伴学笔记创作活动的第 15天
RPC 原理与实践
RPC 的基本概念
-
RPC的概念模型:User、User-Stub、RPC-Runtime、Server-Stub、Server
-
IDL(Interface Definition Language) 文件
- Thrift
- Protobuf
- 生成代码
- 编解码(序列化/反序列化)
-
通信协议
- 应用层协议
-
网络通信
-
IO 网络模型
- blocking IO
- unblocking IO
- IO multiplexing
- signal driven IO
- asynchronous IO
-
-
传输层协议
- TCP
- UDP### RPC 框架分层设计
-
编解码层
-
数据格式:
-
语言特定格式
-
文本格式
-
二进制编码
- TLV 编码:Thrift 使用 TLV 编码
- Varint 编码:Protobuf 使用 Varint 编码
-
-
选项:
- 兼容性
- 通用型
- 性能- 传输协议层
-
消息切分
- 特殊结束符
- 变长协议:length+body
-
协议构造
- 以 Thrift 的 THeader 协议为例讲解
-
-
网络通信层
-
网络库
-
核心指标
- 吞吐高
- 延迟低### RPC 框架的核心指标
-
-
稳定性
-
保障策略
- 熔断
- 限流
- 超时
-
请求成功率
- 负载均衡
- 重试
-
长尾请求
- BackupRequest
-
-
易用性
- 开箱即用
- 周边工具- 扩展性
-
观测性
- Log
- Metric
- Tracing
- 内置观测性服务
-
高性能### 字节内部 Kitex 实践分享
-
Kitex 整体架构
- 自研网络库 Netpoll
-
性能优化:
- 网络库优化
- 编解码优化
- 合并部署### RPC 框架分层设计
编解码层
-
数据格式
- 语言特定格式:例如 java.io.Serializable
- 文本格式:例如 JSON、XML、CSV 等
- 二进制编码:常见有 Thrift 的 BinaryProtocol,Protobuf,实现可以有多种形式,例如 TLV 编码 和 Varint 编码
-
选型考察点
-
兼容性
-
通用型
-
- 空间开销
- 时间开销
-
-
-
- 间开销
-
- 生成代码和编解码层相互依赖,框架的编解码应当具备扩展任意编解码协议的能力