这是我参与「第三届青训营-后端场」笔记创作活动的的第二篇笔记
01再谈HTTP协议
HTTP协议是什么
超文本传输协议(Hypertext Transfer Protocol)
需要明确的边界
能够携带信息
- 请求行/状态行
- 请求头/响应头
- 请求体/响应体
请求流程
不足
- HTTP1:队头阻塞,传输效率低,明文传输不安全
- HTTP2: 多路复用,头部压缩,二进制协议
- QUIC: 基于UDP实现,解决队头阻塞,加密减少握手次数,支持快速启动
分层设计
高内聚,低耦合,易复用,高扩展性
应用层设计
提供合理的API
- 可理解性
- 简单性
- 冗余性
- 兼容性
- 可测性
- 可见性
中间件设计
洋葱模型:核心逻辑与通用逻辑分离 如果用户不主动调用下一个处理函数
- 在任何场景下index保证递增 调用链:不在一个调用栈上
前缀匹配树
协议层设计:抽象出合适的接口
网络层设计
BIO/NIO(多一个监听器)
03.性能修炼之道
针对网络库的优化
- 存下全部Header
- 减少系统系统调用
- 能够服用内存
- 能够多次读
go net with bufio
netpoll
netpoll with nocopy peek
SIMD:针对协议的优化(headers解析)
热点资源池化
04.企业实践
- 追求性能
- 追求易用,减少误用
- 打通内部生态
- 文档建设,用户群建设