第九次笔记|青训营

75 阅读2分钟

一、性能修炼之道

1、 针对网络库的优化

Go net “BIO”

存下全部header,减少系统调用次数,能够复用内存,能够多次读;

Go net with bufio 绑定一块缓冲区

Netpoll 存下全部 header ,拷贝出完整的body

Netpoll with nocopy peek 分配足够大的buffer ,限制最大的buffer size

不同网络库的优势:go net 流式友好;小包性能高   netpoll:中大包性能高;时延低

 

2、 针对协议的优化

Headers解析:找到header line 边界:\r\n

先找到一个\n再看它前面是不是\r

更快的方法:SIMD一种汇编流技术,可以将多个一起

针对协议相关的headers快速解析:1、通过header key 首字母快速筛除掉完全不可能的key

3、 解析对应的value到独立字段

4、 3、使用byte slice管理对应header存储,方便复用

5、 请求体中同样处理的key:

取:核心字段快速解析;使用byte slice存储;额外存储到成员变量中

              舍:普通header性能较低;没有map结构

Header key 规范化:aaa_bbb ->Aaa_Bbb

取·:超高的转换效率;比net.http提高四十倍 舍:额外的内存开销;变更困难

热点资源池化:request-reqeust response data (request  context)->response

与请求一一对应,贯穿一个请求始终

取:减少内存分配;提高内存复用;降低了GC压力;性能提升

舍:额外的reset逻辑;请求内有效;问题定位难度增加

小结:针对网络库的优化:buffer设计

       针对协议的优化:header解析、热点资源池化

二、企业实践

追求性能:从性能的角度考虑风险等等

追求易用、减少误用:

打通内部生态:减小开销、易于用户上手;为追求性能优化影响功能

文档建设、用户群建设:帮助用户解决部分问题,提高双方工作效率

内部http框架:hertz

总结:http协议的相关知识;http框架的一般设计;http框架的优化手段;企业实践 课后作业:分层设计、路由的其它实现方式。。。。。