【笔记】直接使用protocol buffers的底层库,对特定场景的PB编解码进行处理,编码性能提升2.4倍,解码性能提升4.8倍

接上一篇文章:【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
最近计划优化prometheus的remote write协议,因为业务需要,实现了一个remote write的代理。
通过profile发现,15%的CPU时间花在了prompb协议的解码上,11%的CPU花在了协议编码上,这部分资源能不能更少呢?

于是通过直接裸写pb encode/decode的方法,性能提升了不少:
goos: windows
goarch: amd64
cpu: Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz

- pb(次数/s) gogoproto(次数/s) 裸写(次数/s)
encode 106839 (2.8倍) 109888(2.8倍) 302802
decode 20895 (3.3倍) 35101(2.0倍) 69256

后续准备把这个代码贡献给prometheus团队。

原文地址:https://www.cnblogs.com/ahfuzhang/p/15309671.html