性能修炼之道学习笔记 | 青训营

75 阅读1分钟

性能修炼之道

简介

  • 针对网络库的优化

  • 针对协议的优化

1.针对网络库的优化

  • go net(流式友好,小包性能高)

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

    2. go net with bufio

      绑定一块缓冲区

  • netpoll(中大包性能高,时延低)

    1. 存下全部header拷贝出完整的body

image-20230731160938754.png

2.  netpoll with nocopy peek

    分配足够大的buffer,限制最大buffer size

2. 针对协议的优化

  • Headers解析

    1. 找到Header Line边界:\r\n

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

    2. 更快(SIMD)

    3. 针对协议相关Headers快速解析:

      1. 通过Header key首字母快速筛除掉完全不可能的key
      2. 解析对应value到独立字段
      3. 使用byte slice 管理对应的header存储,方便复
      4. 请求体中同样处理的key:User-Agent,Content-Type,Content-Length,Connection,Transfer-Encoding
  • Header key规范化

    1. aaa-bbb—>Aaa-Bbb
  • 热点资源池化

image-20230731162549079.png

image-20230731162629178.png

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

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

总结

  • 针对网络库的优化:buffer设计
  • 针对协议的优化:header解析,热点资源池化

企业实践

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