使用Swoole怎么提高Laravel性能

  介绍

使用Swoole怎么提高Laravel性能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

<强>环境1:

<李>

硬件:1 CPU、4核,16 gb内存

<李>

MacOS 10.15.3

<李>

PHP 7.3.12(启用opcache)

<李>

Swoole任一端

<李>

Shadowfax 2(20个工人进程)

这个环境也就是我个人的Macbook Pro,性能比较好。我用wrk启动4个线程,并发200进行压测:

wrk  -t4  -c200  http://127.0.0.1:1215

结果为<强> 12430 rp :

Running  10 s  test  @  http://127.0.0.1:1215   4,才能threads 以及200年,连接   Thread 才能;Stats ,, Avg ,,,,, Stdev ,,,, Max ,, +/安康;方差   ,,,Latency ,,, 26.44小姐,,31.44小姐212.73小姐,84.28%   ,,,要求/Sec ,,,, 3.13 k ,, 839.99,,,,, 6.07 k ,, 65.75%   124418,才能requests  10.01 s,拷贝,312.06 mb 阅读   Socket 才能;错误:,connect  0,, read  54岁,write  0, timeout  0   请求/秒:12430.20   转/秒:,,,,,31.18 mb

<强>环境2:

<李>

硬件:2个cpu, 2芯,4 gb内存

<李>

CentOS 7.5.1804

<李>

PHP 7.3.16(启用opcache)

<李>

Swoole 4.4.17

<李>

Shadowfax 2(10个工人进程)

这个环境是某云的一个虚拟云服务器实例,配置一般。我用wrk启动2个线程,并发100进行压测:

wrk  -c100  http://127.0.0.1:1215

结果为<强> 4001 rp :

Running  10 s  test  @  http://127.0.0.1:1215   2,才能threads 以及100年,连接   Thread 才能;Stats ,, Avg ,,,,, Stdev ,,,, Max ,, +/安康;方差   ,,,Latency ,,, 25.06小姐,,12.11小姐,小姐的85.92,60.94%   ,,,要求/Sec ,,,, 4.02 k ,,, 41.46,,,,, 4.08 k ,, 79.79%   40321,才能requests  10.08 s,拷贝,101.13 mb 阅读   请求/秒:,,4001.76   转/秒:,,,,,10.04 mb

性能表现还不错吧?比起传统的PHP-FPM,已经有了巨大的提升。

安装与使用

Shadowfax的安装非常简单,只需要两个步骤即可搞定:

第一步,使用作曲家将Shadowfax安装到你的Laravel项目中去:

composer  require 黄奕/Shadowfax

第二步,使用Laravel的工匠命令<代码> Shadowfax:发布来发布配置文件:

php  artisan  Shadowfax:发布

执行完后,在你的项目根目录就会创建一个名为<代码> shadowfax.yml> .gitignore> 。env 文件一样,在不同的环境下配置可能是不一样的。

现在就可以通过Shadowfax命令来启动你的服务:

php  shadowfax 开始

假如是默认配置的话,就可以通过http://127.0.0.1:1215 <代码> 访问你的应用了。当然,这只是简单的使用,更多的信息可前往Shadowfax项目主页查看。

为什么选择Shadowfax

当然,有些朋友会问,Github上面已经有类似的开源项目了,为什么还要重复造一个轮子。其实不然,早在2016年我就开始尝试整合Swoole和Laravel了,先后也开源了两个相关的项目,目前这方面星数最高的swooletw/laravel-swoole就是叉了我早先发布的黄奕/laravel-swoole-http。但我并没有对自己的项目进行推广,因为我很清,楚之前的项目或多或少都存在一些问题,并且不能很好地支持协程,而协程恰好又是Swoole最强的武器,所以都放弃了。

现在,<强> Shadowfax已经可以很好地支持协程了强,你可以放心地开启Swoole的协程特性,并且,Shadowfax还解决了协程环境下数据库连接的问题,当你启用Swoole的一键协程化后,Shadowfax会自动为你的数据库连接创建连接池。最重要的是,这一切在你的应用代码层面都是无感的,你还是像往常一样去写业务代码,完全不要有心智负担,因为Shadowfax不需要你对写代码的方式做出任何改变。

最后我想说明的是,Shadowfax并没有去刻意赋予Laravel使用Swoole的能力,它的主要目的是:<强>在不破坏Laravel开发体验的前提下,以最小的成本提升Laravel应用的性能强。我也不建议开发者在Laravel中使用Swoole的任何接口,因为Laravel本身是一个传统php模式下运行的框架,对Swoole并不友好,如果你不是一个资深的Swoole开发者,很容易在使用过程中出的错。如果你的Laravel应用里未使用任何Swoole接口,这意味着你的程序在PHP-FPM模式下也是能运行的,一旦运行在Swoole上面的程序出了问题,我们便能立马切回PHP-FPM模式,这样可以保证程序的可用性。

使用Swoole怎么提高Laravel性能