测试环境
每一个运行时在1或2个Docker容器中运行
每一个容器有1个CPU和1GB RAM
负载测试工具位置于同一Docker网络中
测试应用程序
Symfony供给了运行时组件。按照官方文档,它“从任何全局状态中提取引导规律,以保证应用程序能够在运行时运行,如”。这寓意着,您能够运用任何您爱好的运行时来研发应用程序,但在生产中运行最高性能。因此呢,咱们不仅能够运用传统的服务器运行应用程序,还能够运用Swoole,AMPHP和ReactPHP等库。展望将来,最后两人被排除在竞争之外。
负载测试工具
K6用于运行负载测试。每一个运行时运行3次,30秒内有十、100和1000个并发连接。
运行时
Apache(prefork模式)+ mod_php
Apache(事件模式)+ PHP-FPM
Nginx + PHP-FPM
Nginx Unit应用服务器
Nginx Unit应用服务器
Nginx + Roadrunner(fcgi模式)
FrankenPHP
FrankenPHP(worker模式)
Swoole
所有运行时都基于官方Docker镜像。倘若不运用镜像,则在构建过程中将应用程序的代码复制到镜像中。PHP 8.3无处不在,除了Nginx Unit。2024年初,Nginx Unit支持的最高PHP版本为8.2。
不幸的是,我无找到与Symfony 7兼容的最新版本的ReactPHP和AMPHP运行时。PHPPM GitHub和Dockerhub看起来都被抛弃了。
应用以下PHP和Symfony设置:
运用php.ini-production(附带官方Docker容器)
已启用Opcache
启用JIT
按照Symfony最佳实践配置preload
Composer自动加载器已优化
Symfony在生产模式下运行
服务容器转储到单个文件
Symfony缓存在容器构建时期预热
应用程序代码以及容器配置能够在GitHub https://github.com/DimDev/php-runtimes-benchmark上找到。
结果
返回外链论坛: http://www.fok120.com,查看更加多
001_Apache+mod_php和002_Apache + PHP-FPM显示了几乎相同的结果。
003_Nginx+PHP-FPM在工作负载较低(并发10和100)时非常接近001_Apache+mod_php和002_Apache + PHP-FPM。
003_Nginx+PHP-FPM在并发量为1000时,能够服务的请求数是Apache堆栈的2倍
004_Nginx单元。首先-哇!!它比传统和最流行的003_Nginx+PHP-FPM快3倍
我不认为005_Roadrunner和006_Nginx+Roadrunner之间有很大的区别
尽管如此,基于Roadrunner的堆栈比003_Nginx+PHP-FPM快2倍以上
007_FrankenPHP(非工作模式)从性能方向来看非常接近003_Nginx+PHP-FPM
008_FrankenPHP(worker mode). Double WOW!我不相信从第1次尝试和运行负载测试3或4倍。因此呢,当发送1000个并发请求时,FrankenPHP(工人模式)比Nginx+PHP-FPM快10倍。同期,亦面临着一个问题。无法用php-ini. production起步容器。
009_swoole -亦是双重WOW!.几乎与008_FrankenPHP(wm)相同的速度。非常快。然则,请记住,您的代码应该调节为与Swoole一块运行。针对Symfony,咱们有一个bundle,它扩展了symfony/runtime组件。
责任编辑:网友投稿
|