Laravel Octane:基于 Swoole/RoadRunner 驱动的高性能 Laravel 解决方案
今天,Taylor Otwell 让 Laracon Online 2021 的与会者第一次看到了 Laravel Octane —— 一个基于 Swoole 和 RoadRunner 等环境运行高性能 Laravel 应用的官方扩展包。
Swoole 想必都很熟悉了,大家对 RoadRunner 可能有点陌生,这是一个基于 Golang 编写的高性能 PHP 应用服务器、负载均衡器和进程管理器。
在一个 hello world 的演示示例中,Octane 通过四个并发线程,在大约 50 个并发请求的负载下,每秒能处理 6000 多个请求,同等条件下,传统 Laravel 应用每秒只能处理几百个请求:
下面是演示过程中使用的基准测试命令:
wrk -t4 -c50 http://localhost:8000/hello-world
Octane 是如何工作的?
Octane 可以通过 Artisan 命令 octane:start
启动,它将运行基于 Swoole 或 RoadRunner 的 HTTP 服务器。你可以根据自己环境的 CPU 线程指定使用哪种技术以及运行多少线程:
artisan octane:start --workers=8 --server=roadrunner
Swoole 和 RoadRunner 都使用了协程(coroutines),因此可以根据 CPU 核数 fork 出多个 worker 进程,这些 PHP worker 进程可以在多个用户请求之间保持 active 状态(你可以通过 Artisan 命令参数标记在 x 次请求后重启),并随时准备接收新的请求,从而让 PHP 程序运行更加高效。
另外,使用 Swoole/RoadRunner 还可以通过常驻内存的方式提高应用程序的启动效率,一改传统 PHP Web 应用每次用户请求需要重新启动 Laravel 框架,消除框架启动时间对应用程序的性能有很大影响,再加上 PHP OPcache 通过在共享内存中缓存字节码来减少运行时开销,可谓如虎添翼。
为什么开发 Octane?
一般的应用程序可能不需要我们在前面 Octane 的演示中所看到的那种 RPS(每秒请求数) 级别。不过,随着业务和系统的增长,对高可用高性能 PHP 应用的需求会越来越迫切,Laravel 在保证框架级代码与 Swoole 和 Octane 等工具无缝对接方面有着独特的优势。
Laravel 对这些技术的官方支持将是现代 PHP 应用扩展方式的重大突破,整个 PHP 生态系统将从这些努力中受益。
不过,目前 Laravel Octane 尚未正式发布,所以还需要等几周时间才能体验,Laravel 学院会持续关注,并在第一时间提供使用教程,敬请关注学院最新动态。
1 Comment
mark~~~