RPC框架 | 青训营笔记

34 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第10天

RPC,即远程过程调用,在微服务架构当中广泛运用。

RPC作为一个基于网络的框架,采用了和网络一样的分层架构。

函数调用

普通的本地函数调用时,实际上就是简单的压栈弹出。

RPC需要解决的问题:

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

一次RPC的完整过程

  • IDL文件:描述接口,跨平台跨语言
  • 生成代码:通过编译器把IDL文件转换成语言对应的静态库
  • 编解码:从内存中表示到字节序列的转换称为编码,反之为解码
  • 通信协议:规范了数据在网络中的传输内容和格式
  • 网络传输:通常基于成熟的网络库走TCP/UDP

分层设计

编解码层

数据格式:

  • 语言特定
  • 文本格式
  • 二进制编码(常用)

协议层

这部分可以参考tcp、http等

基本概念:

  • 特殊结束符
  • 变长协议

协议构造:

  • LENGTH:数据包大小
  • HEADER MAGIC:标识版本信息,协议解析时候快速校验
  • SEQUENCE NUMBER:表示数据包的seqID,可用于多路复用,单连接内单增
  • HEADER SIZE:头部长度,从第14个字节开始计算一直到PAYLOAD前
  • PROTOCOL ID:编解码方式,有Binary和Compact两种
  • TRANSFORM ID:压缩方式,如zlib和snappy
  • INFO ID:传递一些定制的meta信息
  • PAYLOAD:消息体

网络通信层

使用Socket api进行网络通信。

网络库:

  • 提供易用API
  • 功能
  • 性能

关键指标

稳定性

  • 熔断
  • 限流
  • 超时控制

实际上系统的各个部分面对的稳定性挑战都类似,如服务降级,长尾请求等,所以为了保障稳定性的措施也非常类似,在遇到类似的问题时可以优先考虑这些方案。

易用性

  • 开箱即用
  • 周边工具

扩展性

  • Middleware
  • Option
  • 编解码层
  • 协议层
  • 网络传输层
  • 代码生成工具插件扩展

观测性

  • Log、Metric、Tracing
  • 内置观测性服务

高性能

手段:

  • 连接池
  • 多路复用
  • 高性能编解码协议
  • 高性能网络库