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

77 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天,今天对RPC框架有了一定的认识,包括其概念、设计和相关的指标。

基本概念

RPC vs 本地函数调用

1.函数映射 2.数据转换成字节流 3.网络传输

RPC完整过程

  1. IDL,中立接口,使得不同平台不同语言的程序可以相互通信,IDL最终需要转换成语言对应的静态库。
  2. 生成代码
  3. 编解码 也叫做序列化和反序列化。
  4. 通信协议
  5. 网络传输

RPC好处

  1. 单一职责,有利于分工协作
  2. 扩展性强
  3. 故障隔离

分层设计

编解码层

依赖同一个IDL文件,可生成不同语言的代码框架

编解码数据格式:以TLV编码为例

  • T 标签,主要标记类型
  • L 长度
  • V 值,也可以是一个TLV结构 编解码一般要同时考虑其:兼容性,通用性,性能

协议层

一般两种类型

  1. 结束符:特殊字符
  2. 变长协议:定长+不定长字段,定长部分描述不定长字段长度

网络层

TCP:服务端已经close,对端仍然读会返回EOF,对端写会导致error。

RPC关键指标

稳定性

熔断:保护调用方,被调用服务出问题影响整个链路 限流:保护被调用方,防止大量流量压垮服务

稳定性-长尾请求

明显高于均值的那部分占比比较高的请求,业界用P99标准划定:即单个请求响应耗时从小到大排列,后1%是长尾请求。

高性能

高吞吐,低延迟

Kitex

优化

  1. 预计算分配内存,减少内存操作次数,包括内存分配和拷贝

  2. 合并部署,场景:微服务过微,传输和序列化开销大。最终方案是将亲和性强的服务调度到同一个物理机。