laravel9 和 laravels 性能对比

前言:最近想使用 swoole 试试 websocket, 正好安装测试下 laravel 和 swoole 性能,不知道是不是 laravel9 性能优化的好,最后压测结果和 laravels 的差不多~

Laradock 安装 swoole

Laravel

动手操作后遇到问题:
Laravel

因为原先的 PHP 版本是 7.4,需要修改.env文件,将版本切换到 8.0 及以上(laravels安装的时候要求 php 是 8.1,所以还是设置成 8.1 版本的):
Laravel

再次执行 build 命令后成功。

验证结果:
Laravel

配置 laravels的 http服务器

1. 安装laravel项目

教程很多,此处参考自:Laravel 9 中文文档-安装

基于 安装了docker 的环境

curl -s "https://laravel.build/laravel9" | bash

2.安装 laravels

composer require hhxsv5/laravel-s

3.发布 laravels 配置

php artisan laravels publish

4.配置站点

说明: 站点对应的项目代码都是/var/www/laravel9/public

(1) 配置 laravels 的 http 服务器

upstream laravels {
    # Connect IP:Port
    server workspace:5200 weight=5 max_fails=3 fail_timeout=30s;
    keepalive 16;
}
server {
    listen 80;

    server_name swoole.test;
    root /var/www/laravel9/public;
    index index.php index.html index.htm;

    # Nginx 处理静态资源,LaravelS 处理动态资源
    location / {
        try_files $uri @laravels;
    }

    location @laravels {
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Scheme $scheme;
        proxy_set_header Server-Protocol $server_protocol;
        proxy_set_header Server-Name $server_name;
        proxy_set_header Server-Addr $server_addr;
        proxy_set_header Server-Port $server_port;
        proxy_pass http://laravels;
    }

    error_log /var/log/nginx/swoole_test_error.log;
    access_log /var/log/nginx/swoole_test_access.log;
}

注意:laravels项目需要在laravel9项目下的.env文件中增加以下配置:

LARAVELS_LISTEN_IP=workspace
LARAVELS_DAEMONIZE=true

(2) 配置普通laravel项目站点

server {

    listen 80;
    listen [::]:80;

    # For https
    # listen 443 ssl;
    # listen [::]:443 ssl ipv6only=on;
    # ssl_certificate /etc/nginx/ssl/default.crt;
    # ssl_certificate_key /etc/nginx/ssl/default.key;

    server_name laravel.test;
    root /var/www/laravel9/public;
    index index.php index.html index.htm;

    location / {
         try_files $uri $uri/ /index.php$is_args$args;
    }

    location ~ \.php$ {
        try_files $uri /index.php =404;
        fastcgi_pass php-upstream;
        fastcgi_index index.php;
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        #fixes timeouts
        fastcgi_read_timeout 600;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    location /.well-known/acme-challenge/ {
        root /var/www/letsencrypt/;
        log_not_found off;
    }

    error_log /var/log/nginx/laravel_error.log;
    access_log /var/log/nginx/laravel_access.log;
}

(3) 本地 host 配置

127.0.0.1 swoole.test
127.0.0.1 laravel.test

(4) 重新 build 容器

docker-compose stop
docker-compose build workspace nginx
docker-compose up -d redis mysql nginx workspace

Laravel

(5) 进入 workspace 容器启动 laravels

进入容器命令:

docker exec -it d4940755a928 /bin/bash

Laravel

AB性能测试结果

  • 核心关注的是每秒请求数(Requests per second)
  • 都是基于 Laradock 环境
  • 共享同一份项目代码
  1. 总请求数是 100,并发数是 10(左侧为 swoole,右侧为 laravel9):
    Laravel

  2. 总请求数是 1000,并发数是 20(左侧为 swoole,右侧为 laravel9);
    Laravel

差距不明显,甚至有时候 laravel9 的结果更好,这样的结果算翻车吗~

本作品采用《CC 协议》,转载必须注明作者和本文链接
今天你精进了吗?
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 19

Octane 呢?

1年前 评论

你这个太少了点,试试并发大的

1年前 评论

在处理并发业务上协程有先天优势的。把并发数拉到起码每秒1000把。并发20算啥并发啊,算是普通业务都能达到的基本

1年前 评论
青春不留白 1年前
青春不留白 1年前

我觉得你环境搭建可能有点问题

1年前 评论
GDDD

用laravel,谈性能?

1年前 评论
游离不2

laravel 9 和 laravel-s 没有可比性

1年前 评论

既然你谈到了性能,为什么那么多高性能协程框架你不用,或者其他高并发语言你不用,例如go;偏偏去使用laravel,当你去用laravel的时候,就不要谈性能了,本身没什么意义。

1年前 评论
lovewei (作者) 1年前
air93610 1年前
lovewei (作者) 1年前
air93610 1年前

我感觉有必要确认下swoole.test 是否走到了swoole http server。 加个路由,输出php_sapi_name() 看看。

1年前 评论
哪吒的狗腿子 1年前

这绝对是不正常。。 laravels 搭配的是lumen 8 在虚拟2Ghz双线程,8G内存的服务器上我这边是每秒2000+的并发量。你这个值就很拉了。
对了 没开启opcache的php就是辣鸡中的辣鸡。开启之后加上swoole 感觉能和go一战

要不先测下空跑php的速率?
单文件php(开启opcache,php7.4) echo hello world的情况下。我这个渣渣服务器能到7000+的并发

1年前 评论

laravels不加端口号?

1年前 评论

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