服务器环境
腾讯云ECS 标准型S5 2核2GB 1Mbps
ECS安装软件: PHP8.2 + Nginx + Mysql8.2 + Redis + Supervisor
Tips: 服务器软件搭建过程 传送门
闲时开发的一个项目,采用laravel框架,接口性能如预期般不满意。个人认为PHP项目接口响应慢主要在于两个因素:
- php-fpm 机制,每次请求会重新加载并执行一次文件(十几甚至几十个)
- 无数据库连接池,每次请求需要重新与数据库建立连接
数据库连接池经过一轮搜索了解已经放弃了。。。。。。
这里采用官方的提速方案 (Laravel Octane)
安装
composer require laravel/octane
php artisan octane:install --server=roadrunner
npm install --save-dev chokidar
--server 有3个可选值:frankenphp
、roadrunner
、 swoole
frankenphp 是 octane 最新支持的,实测(日期2024-04-15) frankenphp 不稳定,进程时不时就挂掉,所以改用 roadrunner。
chokidar 是监听文件重启服务用的。
启动
php artisan octane:start --host=127.0.0.1 --port=8484 --watch
这里命令在服务器直接执行没有问题,但是通过supervisor执行就总是提示npm、chokidar 未安装,全局安装及项目目录安装后都一样,无奈只能在supervisor的配置中去掉 --watch。
测试
测试直接使用apifox软件,获取 php-fpm、octane 在单用户、多用户情况下的实际表现。
这里的测试结果会比网上其它测试表现低很多,服务器配置差距是一方面,主要在于这里测试的是实际的业务接口,不能与空接口相提并论。
单用户请求
php-fpm
octane
10个用户并发
php-fpm
octane
20个用户并发
php-fpm
octane
平均响应时间 1个用户 | 平均响应时间 10个用户并发 | 平均响应时间 20个用户并发 | |
php-fpm | 486 ms | 6296 ms | 14353 ms |
octane | 275 ms | 1390 ms | 7406 ms |
总体来说,使用 octane 后,接口性能提升1~3倍,实际体验的提速效果还是比较明显的。