Swoole 加速 Laravel 哪家强?一组盲测见真晓

最近突然对「Swoole 加速 Laravel」这个话题来了兴趣,印象中前面也看到了好几个相关的开源作品——但苦于一直没有机会实际体验,所以也只能算是知道。

前阵子 PHP7.4发布,预加载(Preloading)功能特性十分令人兴奋。忽然想起 Swoole 加速 Laravel 的原理,觉得在还没有机会在生产环境上 7.4 的情况下先用 Swoole 折衷实现一下也挺好。但相关的开源作品这么多,到底哪个比较好呢?于是有了这两天的密集上手测试。实际看过的作品包括:

而实际测试到的是后面 3 个:laravoole、laravel-swoole 和 laravel-s。前面 3 个放弃测试的原因是:

  1. 库的更新时间都比较久远,好几年前了
  2. 库的设计不太优雅,不够 Laravel 风...

当然了,按照以上标准看:测试到的 3 个里面,最优雅的是 laravoole,但也是最旧的(最后更新时间为2017 年 11 月 10 日)。

之所以说 laravoole 的设计优雅,主要体现在其与 nginx 配合食用的方式有 2 种:一种是常规的 proxy_pass,另一种是fastcgi_pass。我个人比较喜欢 fastcgi_pass,这就等于是平移了 php-fpm 的方式了。

下面说说测试方法和初步结果。

测试方法很简单:

  1. 先创建一个原始的 Laravel 项目 composer create-project --prefer-dist laravel/laravel lara
  2. 再按照各家文档引用相应的库 composer require ...
  3. 然后按说明简单配置后启动 swoole 服务,并配置基于端口的本地 nginx 虚机
  4. 最后使用 ab 进行压测 ab -k -n1000 -c10 http://127.0.0.1:port/

够简单吧?那么初步的测试结果如何呢?下面就来揭晓!

我最先测到的是 laravoole,因为最受我青睐嘛。不过测试结果让我非常疑惑,经过 swoole 加速之后的 QPS 竟然还不如 PHP-FPM 模式...我以为我看错了,反复数次结果都差不多。随后测试的是 laravel-swoole,竟然也和 laravoole 差不多,至少并没有表现得很惊艳。而让我发出「哇」声的是 laravel-s,大概有 4 倍的性能提升——是个很明显的差异。我反复测试了好几遍,这个差异一直能稳定复现。不知道各位看官,这个结果在你们意料之中吗?

测试过程中,我曾尝试各种配置调优。我发现 laravoole 和 laravel-swoole 在结合 nginx 后 QPS 有所下降,我怀疑是否跟未手动配置 keepalive 有关(目前尚未及验证)。反正 laravel-s 按照作者的配置指引之后,直接压测 swoole http服务与压测 nginx proxy_pass 基本看不出差异。我留意到其 nginx 配置里有 keepalive 相关优化。

怎么说呢?截至本篇发文,我只是进行了一次初步测试。可能并不能代表真实情况。也欢迎以上作品的作者和各位 Laraver 、PHPer 提供你们的测试讯息。

需要补充说明的是,涉及到的 3 个作品我都有分别针对 swoole http 服务及 nginx proxy 服务进行压测。laravoole 的 swoole http 服务会出现卡顿一会后直接超时退出的情况,导致压测直接失败...其他 2 个都能正常完成测试。(全文完)

附言 1  ·  4年前

补充介绍本次的测试环境:

  • CentOS 7.4 64位 2 核 4G
  • PHP 7.1.3 with OPCache
  • Laravel 5.8.35
  • Nginx 1.16.1
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

请问一下,我也试过用 laravel-s 加速 laravel 应用,出现的一种情况是 cpu 使用率上大大优于 fpm 对于 cpu 的使用,但是并发 \ 请求成功总数上并没有比 fpm 提升多少。这种情况是什么原因导致的?对了,单纯返回字符串的话可以提升4-5倍,但是连数据库后查询返回貌似就没很大差别了。

4年前 评论
hhxsv5 4年前
漫天风雨下西楼 4年前
oidns (楼主) 4年前
will_lin (作者) 4年前
will_lin (作者) 4年前
oidns (楼主) 4年前
Double-Jin 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!