美文网首页
用 swoole 加速 laravel 似乎并不像宣传的那么有效

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

作者: 大官人886 | 来源:发表于2022-05-18 13:59 被阅读0次

    我的测试环境

    服务器是腾讯云轻量云主机 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 框架,正确的姿势是使用连接池,提高数据库的效率。

    相关文章

      网友评论

          本文标题:用 swoole 加速 laravel 似乎并不像宣传的那么有效

          本文链接:https://www.haomeiwen.com/subject/wklaurtx.html