Go RoadRunner调研

因为公司项目是Laravel开发的.. 大家也知道Laravel牺牲了性能从而得到了开发的快速,高效

要解决的问题

  • 在不改动代码的情况下提升api qps
  • 降低api服务器cpu负载

swoole

swoole的项目

以上两个项目都会存在变量不回收的问题(当然也有可能是我测试方法不对)

RoadRunner

这是php-fpm 和 RoadRunner的qps对比图 差不多 都快赶上lumen了

file

创建文件的权限问题

因为目前是用supervisord来挂住RoadRunner的,supervisord是root用户在跑..所以生成的日志文件也是root用户生成的

这点和php-fpm有点不一样了

发现已知的问题

  • 无法过laravel的csrf 如果去掉csrf验证 后台呈现一直登陆不上的问题
  • 无法使用任何打印函数, 包括laravel的dump,dd

注意事项

  • 如果需要改动numWorkers数量 一定要重新启动roadrunner服务 http:reset是没用的,至于numWorkers设置多少,有待商榷
  • 每次改动过代码 一定要 http:reset
  • mysql一直保持长连接. 导致mysql连接数过多
  • 静态变量不释放

ab测试

空跑框架测试

空跑框架 均不开opcache-cli

php-fpm

file

RoadRunner不走nginx

file

RoadRunner走nginx

file

ab业务逻辑

不开启opcache-cli

RoadRunner

file

php-fpm

file

开启opcache-cli

RoadRunner

file

php-fpm

file

总结

Road优势

  • 内存占用少
  • 可以做到在启动线程的时候实例化Laravel 容器,以免多余开销
  • 有RPC

Road劣势

  • 对于PHP中的静态变量,需要手动释放
  • 失去了php代码热部署. 因为,你每次改动代码都需要 http:reset
  • 一些 链接 可能不会主动释放, 比如mysql
  • 不能使用var_dump, dd 等等.. 这些打印函数, 会让线程down掉
  • 没有了php-fpm的慢日志

php-fpm

  • 如果只说php-fpm.. 我不知道又什么优势,但是他结合opcache确实很不错

最终呢, RoadRunner确实是比php-fpm快10毫秒左右,但是. 我觉得为了这10毫秒.. 去牺牲那么多的东西 不! 值! 得!

参考文章