这是我参与「第五届青训营」伴学笔记创作活动的第16天
本文基于字节青训营+上网自学的内容。
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
内置观测性服务
高性能
场景:单机多机、单连接多连接、单/多用户机 单/多服务器...
目标:高吞吐、低延迟
手段:连接池、多路复用、高性能编解码协议、高性能网络库