性能修炼之道
简介
-
针对网络库的优化
-
针对协议的优化
1.针对网络库的优化
-
go net(流式友好,小包性能高)
-
存下全部header减少系统调用次数,能够复用内存,多次读
-
go net with bufio
绑定一块缓冲区
-
-
netpoll(中大包性能高,时延低)
- 存下全部header拷贝出完整的body
2. netpoll with nocopy peek
分配足够大的buffer,限制最大buffer size
2. 针对协议的优化
-
Headers解析
-
找到Header Line边界:\r\n
先找到\n再看它前一个是不是\r
-
更快(SIMD)
-
针对协议相关Headers快速解析:
- 通过Header key首字母快速筛除掉完全不可能的key
- 解析对应value到独立字段
- 使用byte slice 管理对应的header存储,方便复
- 请求体中同样处理的key:User-Agent,Content-Type,Content-Length,Connection,Transfer-Encoding
-
-
Header key规范化
- aaa-bbb—>Aaa-Bbb
-
热点资源池化
取:减少了内存分配,提高内存复用,降低GC压力,性能提升
舍:额外的Reset逻辑,请求内有效,问题定位难度增加
总结
- 针对网络库的优化:buffer设计
- 针对协议的优化:header解析,热点资源池化
企业实践
- 追求性能
- 追求易用,减少误用
- 打通内部生态
- 文档建设,用户群建设