Laravel Nginx + PHP-FPM、Nginx Unit、RoadRunner Octane 基准测试
https://zenn.dev/yamayuski/articles/96478cb4fe1573 https://github.com/il-m-yamagishi/laravel-loadtest https://habr.com/en/post/646397/ 可以在上面查看。 这是我自己瞎折腾的一番记录。在来
https://zenn.dev/yamayuski/articles/96478cb4fe1573
https://github.com/il-m-yamagishi/laravel-loadtest
https://habr.com/en/post/646397/
可以在上面查看。
这是我自己瞎折腾的一番记录。在来回尝试修改 Docker 设置的过程中,我确实感觉到 Nginx、PHP-FPM 变快了,于是中途没能停下来,最后就折腾到了这里。
我从下午 2 点开始,凌晨 5 点才结束,也就是说,我花了 15 个小时做这件事……
用户数 5000,请求数
不过!!!服务器 DNS 指向 CloudFront,服务器是我自己运行的(Threadripper 3990,256 GB),请求也是我自己发起的。(因为相当于我自己向自己发请求,所以会受到我发起请求的带宽限制,结果可能不准确。)
但不管怎样,我还是试了试。
如果 nginx worker 扛不住,nginx 就一定会崩掉。
但是,即使增加 nginx worker,php-fpm 的延迟也会不断增加。
另外,偶尔也会出现请求失败。
有人说这个好,有人说那个不好,所以我就试了试。
哇……这是什么情况?nginx unit 的性能快得简直不可思议。它提供了和配置了 octane 时差不多的速度。真的太离谱了……如果能把配置部分处理好,我觉得光用 Nginx Unit 也完全能应付。
但是,因为我配置水平不够,Nginx Unit 直接就崩了,而且再也没能恢复。
(我想大概是这部分配置水平不足导致的;只要配置得当,我觉得 Nginx Unit 应该不会崩。不过,为什么大家都不用 Nginx Unit 呢?嗯……PHP 也停在 8.1.1,而现在已经是 8.1.16 了(当然,自己用 Dockerfile 构建镜像也行,不过嫌麻烦))

我记得自己上篇文章里好像对 octane 持悲观态度,但这次不一样了。我无条件推荐。虽然代码写法会有一点变化,但我觉得优点真的比缺点多得多。
首先,它不会崩。但是,延迟会增加。我记得最高增加到了 1~3 秒。

还有一个重要的问题是,它能处理的请求数不多。RPS……
一开始我以为只加上 Roadrunner 会好得多,但那是个错误的想法。
当然,也可能是我的配置有问题。

这是第一个结果。即使 RPS 达到了 1846,它也依然运行得好好的,而且速度非常快。
看到这个结果后我很惊讶,于是又跑了一次。

结果也一样。
后面 RPS 减少,大概是因为我的网络带宽上限在输入和输出两方面都达到了极限。
不过,无论如何,Nginx + roadrunner 的配置比单独使用 roadrunner 时 RPS 增长得更快,能够处理更多请求,而且在接收请求的同时也显示出了更快的 ms 数值。
我真的很推荐使用 laravel octane。即使面对海量请求,服务器也绝不会崩掉。
不要直接连接 roadrunner,而是通过前面的 nginx worker 来连接。这样可以接收更多请求,也能更快地响应。
这次测试比较主观。
而且,发送 request 的电脑网络是我的,服务器电脑也是我的,所以结果也可能不准确。
我的电脑 -> cloudfront -> 服务器电脑
这 15 个小时让我获得了非常宝贵的经验……可是,我还有工作要做…… :(