protobuf之于php的总结

protobuf 之于 php 这块,有三个东西。

  1. 根据你定义的 proto 文件生成 php 代码的 protoc 命令工具
  2. 生成的 php 代码要运行起来必须依赖一个 composer 包:google/protobuf
  3. google/protobuf 包加速的 C 扩展,即使没有它,只要安装了 php 包,你生成的代码也是能跑的

相关的资源链接如下:
安装 protoc 命令工具
定义 proto 并生成 php 代码的示例
运行生成的 php 代码所必须的 composer 包
google/protobuf 包加速的 C 扩展
protobuf 之于 php 这块的官方 github 库

那么既然安装了 google/protobuf 包就可以运行生成的 php 代码,那么要不要装 C 扩展呢?
我的答案是生产环境,如果你的服务运行压力大,那必须安装 C 扩展,安装后机器的 CPU 消耗会获得一个明显的下降。
我给出一组数据,仅作参考:
没装 C 扩展的压测结果

Duration=16.8986119s IOPS=5917 P50=121ms P90=464ms P99=1198ms
Duration=18.2297206s IOPS=5485 P50=134ms P90=490ms P99=1114ms
Duration=17.4630705s IOPS=5726 P50=124ms P90=461ms P99=1040ms

安装 C 扩展后的压测结果

Duration=14.0495202s IOPS=7119 P50=64ms P90=365ms P99=1035ms
Duration=13.3690243s IOPS=7479 P50=59ms P90=375ms P99=1030ms
Duration=14.2898181s IOPS=6997 P50=57ms P90=372ms P99=1063ms

从数据看,收益明显,P90 的响应耗时,下降了将近 100 毫秒。
下面是 C 扩展的安装流程:

wget https://pecl.php.net/get/protobuf-3.24.3.tgz
tar zxvf protobuf-3.24.3.tgz
cd  protobuf-3.24.3
/usr/local/bin/php8.1.9/bin/phpize
./configure --with-php-config=/usr/local/bin/php8.1.9/bin/php-config
make -j 4 && make install

编译好后,将 protobuf.so 文件引入 php.ini 即可:extension=protobuf.so
这个扩展安装步骤就是 php 的常规步骤。

本作品采用《CC 协议》,转载必须注明作者和本文链接
梦想星辰大海