用 swoole 加速 laravel 似乎并不像宣传的那么有效

2022-05-18  本文已影响0人  大官人886

我的测试环境

服务器是腾讯云轻量云主机 2核4G, php7.4

ab 客户端运行在 mac m1

我的测试分3个步骤,相互之间无影响

1. laravel 线上环境(nginx + php-fpm, 无 opcache)

2. laravel + opcache 环境 (nginx + php-fpm)

3. laravel + laravelS 扩展 (swoole)

测试步骤

1. laravel 线上环境

 composer create-project laravel/laravel laravel-test

加一个 route:

Route::get('/test', function () {
      return 'ok';
 });

然后做一下简单优化,也就是文档中提到的几个命令,因为我们上线一定会用到这些优化的

composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache

接下来要用 ab 做测试了,在我的电脑上输入

ab -n 1000 -c 100 http://www.itutil.cn:8001/test

结果:

image

1000 个请求在42.6s 内完成,qps: 23.42

2. laravel + opcache

先安装 opcache, 安装完后会自动启用,默认配置

sudo apt install php7.4-opcache

image

1000 个请求在4.1s 内完成,qps: 227

3. laravel + laraveS 扩展

我们先停掉 nginx 和 php-fpm,写在 opcache 扩展

sudo service nginx stop 
sudo service php7.4-fpm stop

安装 laravelS

composer require hhxsv5/laravel-s
php artisan laravels publish

别忘了,还要安装并启用 swoole 扩展 ,所有选项都默认

sudo pecl install swoole
echo "extension=swoole.so" |sudo tee /etc/php/7.4/cli/conf.d/20-swoole.ini

然后一样的在输入 laravel 优化的命令

composer install --optimize-autoloader --no-dev
php artisan config:cache
php artisan route:cache

大功告成,启动服务器

修改 laravels 的监听端口,默认是127.0.0.1,外网无法访问

echo "LARAVELS_LISTEN_IP=0.0.0.0" >> .env
php artisan config:cache

执行测试

ab -n 1000 -c 100 http://www.itutil.cn:5200/test

image

1000 个请求在1.87s 内完成,qps: 533

总结

我们对结果汇总

Laravel Laravel + Opcache Laravel + LaraveS
请求数 1000 1000 1000
总耗时 (s) 42.698 4.405 1.876
失败数 0 0 0
每个请求平均耗时 (ms) 42.698 4.405 1.976
QPS 23.42 227.04 533.08

可以看到, swoole 对 helloword 程序的确有一点加速效果,比 opcache 快了 2.4 ms 左右,也许你会说这也快了不止2倍
但是如果访问数据库或者 redis,随随便便都是10ms,况且完整的项目要多次访问数据库,这 2.4ms 就可以忽略了。
所以我的结论是 swoole 对 laravel 的加速效果微乎其微,反而增加了复杂度和不稳定性,得不偿失。
一个项目的瓶颈几乎都是在数据库,所以如果想用 swoole 加速你的 laravel 或其他 php 框架,正确的姿势是使用连接池,提高数据库的效率。

上一篇下一篇

猜你喜欢

热点阅读