接上一篇文章:【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
最近计划优化prometheus的remote write协议,因为业务需要,实现了一个remote write的代理。
通过profile发现,15%的CPU时间花在了prompb协议的解码上,11%的CPU花在了协议编码上,这部分资源能不能更少呢?
于是通过直接裸写pb encode/decode的方法,性能提升了不少:
- | pb(次数/s) | 裸写(次数/s) | 倍数 |
---|---|---|---|
encode | 120022 | 291235 | 2.4 |
decode | 22540 | 107499 | 4.8 |
后续准备把这个代码贡献给prometheus团队。