这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
一、目录
本节课主要分为四个部分:
1.RPC相关基本概念
2.RPC框架的分层设计
3.衡量RPC框架的一些核心指标
4.字节内部RPC框架Kitex实践分享
二、RPC基本概念
实现远程调用需要解决的问题
函数映射
数据转换成字节流
网络传输
概念模型
RPC的过程由五个模型组成:User、User-Stub、RPC-Runtime、Server-Stub、Server。来自论文《Implementing Remote Procedure Calls》
一次RPC的过程
IDL(Interface Definition Language)文件:描述接口,使不同平台上运行的对象和不同语言编写的程序可以相互通信。
生成代码:把IDL文件转换成语言对应的静态库。
编解码:从内存中的表示到字节序列的转换。
通信协议:应用层协议。
网络通信:分为IO网络模型(包含blocking IO、unblocking IO、IO multiplexing、signal driven IO、asynchronous IO)和传输层协议(TCP、UDP)。
RPC优点
单一职责,有利于分工协作和运维开发。
可扩展性强,资源使用率更优。
故障隔离,服务的整体可靠性更高。
RPC需解决的问题
服务宕机、调用过程中发生网络异常、请求量突增导致服务无法及时处理。
三、RPC框架的分层设计
编解码层
数据格式:语言特定格式、文本格式、二进制编码(TLV编码、Varint编码)
选项:兼容性、通用型、性能。
传输协议层
消息切分:特殊结束符、变长协议(length+body)
协议构造:以Thrift的THeader协议为例讲解。
网络通信层
网络库
核心指标:吞吐高、延迟低。
四、RPC框架的分层设计
稳定性
保障策略:熔断、限流、超时。
请求成功率:复杂均衡、重试。
长尾请求:BackupRequest。
易用性
开箱即用与周边工具。
扩展性
观测性
Log、Metric、Tracing、内置观测性服务。
高性能
五、字节内部RPC框架Kitex实践分享
Kitex整体架构
自研网络库Netpoll
性能优化:网络库优化与编解码优化。
合并部署。