这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
RPC框架
本文主要针对RPC框架。
RPC概念模型
一次RPC过程
IDL (Interface description language)文件
IDL通过一种中立的方式来描进接口,使得在不同平台上运行的对象和用不同语言编写的程序可以相互通信
生成代码
通过编译器工具把IDL文件转换成语言对应的静态库
编解码
从内存中表示到字节序列的转换称为编码·反之为解码·也常叫做序列化和反序列化
通信协议
规范了数据在网络中的传输内容和格式·除必须的请求/响应数据外·通常还会包含额外的元数据
网络传输
通常基于成熟的网络库走TCP/UDP传输
RPC优势
1.单一职责,有利于分工协作和运维开发
2.可扩展性强,资源使用率更优
3.故障隔离,服务的整体可靠性更高
RPC分层设计
编解码层
语言特定的格式
许多编程语言都内建了将内存对象编码为字节序列的支持·例如Java有java.io.Serializable
文本格式
JSON,XML,CSV等文本格式,具有人类可读性
二进制编码
具备跨语言和高性能等优点,常见有Thrift的BinaryProtoco,如Protobuf等
协议层
- LENGTH:数据包大小,不包含自身
- HEADER MAGIC:标识版本信息,协议解析时候快速校验
- SEQUENCE NUMBER:表示数据包的seqID ,可用于多路复用·单连接内递增
- HEADER SIZE:头部长度,从第14个字节开始计算一直到PAYLOAD前
- PROTOCOL ID:编解码方式,有 Binary和Compact 两种
- TRANSFORM ID:压缩方式,如zlib 和snappy
- INFO ID:传递一些定制的meta信息
- PAYLOAD:消息体
网络通信层
关键指标
稳定性–保障策略
熔断:保护调用方,防止被调用的服务出现问题而影响到整个链路
限流:保护被调用方,防止大流量把服务压垮
超时控制:避免浪费资源在不可用节点上
稳定性-请求成功率
稳定性-长尾请求
长尾请求—般是指明显高于均值的那部分占比较小的请求。
稳定性-注册中间件
易用性
扩展性
- Middleware
- Option
- 编解码层
- 协议层
- 网络传输层
- 代码生成工具插件扩展
观测性
高性能
场景
- 单机多机
- 单连接多连接
- 单/多client 单/多server
- 不同大小的请求包
- 不同请求类型∶例如
- pingpong - streaming 等
目标
- 高吞吐
- 低延迟
手段
- 连接池
- 多路复用
- 高性能编解码协议
- 高性能网络库