protobuffer性能分析测试

入职第一个任务就是做protobuf性能测试。一个是PHP那边对PB性能不是很满意,延迟有点难以接受,二来我们架构可能要推一个全平台通用的工具,所以想对比一下性能,了解一下问题在哪。因为之前对于序列化和反序列化工具没有什么概念,从头了解了下序列化的整个工作流程。简单的工作交给了我我也算是练练手。

有说的不对的还望指正,刚刚学了不久只能浅浅的谈一下

在线上实际使用中,为了PHP开发方面, 实际Protobuf在使用时封装为encode,decode 两个函数。encode, decode主要封装了从一个数组转化为对象和将对象转化为数组的操作,实现了 以数组的形式序列化和反序列化。

因为Protobuf本身是CPU消耗型的, Xhprof榜上有名也算正常,我们考虑的是能否接受这种消耗。 因为没有线上CPU负载相关的数据,很难说消耗多少CPU算多。因此我们这边先做了下Protobuf跟 PHP其他序列化方式的对比测试。

测试方案

我们选取了PHP 自身的序列化函数, JSON, Protobuf, 以及decode封装后的Protobuf进行测试, 分别设置Content内容为128, 512, 1024 字节。 为了简单起见, 我们对一个数据文件反序列化10000k次,统计使用时间(real time),单位秒。

tools 128bytes 512 bytes 1024 bytes

PHP native

4.364

4.392

4.384

JSON

6.999

12.222

33.277

Protobuf

2.505

2.497

2.701

**** ****** ****** ******

总结

从上表可以看出, 单纯的Protobuf解析实际比PHP,JSON要快很多。对于其中某个字段内容较长的情况,除JSON以外,反序列化时间基本不受影响,这是因为二进制 格式事先存储了字符串长度,可以直接解析出来。JSON因为是文本解析, 需要逐字符扫描,因此在content 比较大时,耗时较长。

供大家参考下

你可能感兴趣的:(PHP,序列化,性能测试,pb,protobuffer)