HTTP框架 | 青训营笔记

148 阅读1分钟

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

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.企业实践

  • 追求性能
  • 追求易用,减少误用
  • 打通内部生态
  • 文档建设,用户群建设