RPC框架(分层设计及关键指标)(day16)| 青训营笔记

70 阅读2分钟

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

image.png

本文基于字节青训营+上网自学的内容。

1.分层设计

编解码层

客户端和服务端通过IDL生成不同的语言
语言特定编码格式 许多编程语言都内建了将内存对象编码为字节序列的支持,例如Java有java.io.Serializable。(好处是可以用很少的额外代码实现内存对象的保存与恢复,坏处是兼容性和安全,实际上限制了语言。)
文本格式 JSON、XML、CSV等文本格式,具有人类可读性(不区分整数和浮点,不能指定精度。)
二进制编码 具备跨语言和高性能等优点,常见有Thrift的 BinaryProtocol,Protobuf等(有很多种实现方法)

协议层

√特殊结束符 一个特殊字符作为每个协议单元结束的标示
√变长协议 以定长加不定长的部分组成,其中定长的部分需要描述不定长的内容长度

网络通信层

√提供易用API 封装底层Socket APl连接管理和事件分发
√功能 协议支持: tcp、udp 和uds 等优雅退出、异常处理等
√性能 应用层 buffer减少copy高性能定时器、对象池等

2.关键指标

稳定性

保障策略(熔断、限流、超时控制)

易用性

开箱即用 合理的默认参数选项、丰富的文档等
周边工具 生成代码工具、脚手架工具等

扩展性

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

观测性

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

高性能

场景:单机多机、单连接多连接、单/多用户机 单/多服务器...
目标:高吞吐、低延迟
手段:连接池、多路复用、高性能编解码协议、高性能网络库