RPC原理与实践 | 青训营笔记

70 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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

性能优化:网络库优化与编解码优化。

合并部署。