RPC框架 | 青训营笔记

103 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

RPC框架

本文主要针对RPC框架。

RPC概念模型

RPC_1.png

一次RPC过程

IDL (Interface description language)文件

IDL通过一种中立的方式来描进接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信

生成代码

通过编译器工具把IDL文件转换成语言对应的静态库

编解码

从内存中表示到字节序列的转换称为编码·反之为解码·也常叫做序列化和反序列化

通信协议

规范了数据在网络中的传输内容和格式·除必须的请求/响应数据外·通常还会包含额外的元数据

网络传输

通常基于成熟的网络库走TCP/UDP传输

RPC优势

1.单一职责,有利于分工协作和运维开发
2.可扩展性强,资源使用率更优
3.故障隔离,服务的整体可靠性更高

RPC分层设计

RPC_3.png

编解码层

RPC_4.png

语言特定的格式

许多编程语言都内建了将内存对象编码为字节序列的支持·例如Java有java.io.Serializable

文本格式

JSONXMLCSV等文本格式,具有人类可读性

二进制编码

具备跨语言和高性能等优点,常见有Thrift的BinaryProtoco,如Protobuf等

协议层

RPC_5.png

RPC_6.png

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

网络通信层

RPC_8.png

RPC_7.png

关键指标

稳定性–保障策略

熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
限流:保护被调用方,防止大流量把服务压垮
超时控制:避免浪费资源在不可用节点上

稳定性-请求成功率

RPC_9.png

RPC_10.png

稳定性-长尾请求

长尾请求—般是指明显高于均值的那部分占比较小的请求。

RPC_11.png

稳定性-注册中间件

RPC_12.png

易用性

扩展性

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

RPC_13.png

观测性

高性能

场景

  • 单机多机
  • 单连接多连接
  • 单/多client 单/多server
  • 不同大小的请求包
  • 不同请求类型∶例如
  • pingpong - streaming 等

目标

  • 高吞吐
  • 低延迟

手段

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