直接序列化是LoongCollector第四步优化,解决发送阶段的数据拷贝问题。
原始方式:
PipelineEventGroup → 组装成LogGroup PB对象 → 调用PB的Serialize方法 → 字节流
数据经过两次拷贝,中间的LogGroup PB对象是多余的临时对象。
优化方式:
直接按照Protobuf编码协议,将PipelineEventGroup的内容依次写入结果字符串,跳过中间PB对象的构造。
优化前:EventGroup → LogGroup PB(拷贝1)→ bytes(拷贝2)
优化后:EventGroup → bytes(仅一次写入)
实现要点:
- 需要理解Protobuf的Wire Format编码规则(varint、length-delimited等)
- 手动按协议格式将字段逐个编码写入buffer
- 省去了PB对象的内存分配、字段赋值和最终序列化三个步骤
这一优化特别适合LoongCollector场景,因为发送是高频操作,中间对象的构造/析构在高吞吐下累积开销显著。四步优化后最终性能提升100%(135→280 MB/s)。




