Nginx + PHP-FPM 的組合從 2010 年後稱霸 PHP 應用程式伺服器,PHP-FPM 也是 PHP 官方標準,所以 Nginx + PHP-FPM 的組合基本上是目前 PHP 網站的主流。
然而 Laravel 搭配 Nginx + PHP-FPM 在高併發時仍會出現一些問題:
Laravel:每個 HTTP request 都會都會重新載入 service provider、env 設定、解析路由及控制器等等初始化工作,降低了效能。
PHP-FPM:每個 worker process 只能處理一個 request,如果達到最大 process 數量(pm.max_children),就會剩下的 request 就會進入等待,可能會發生 timeout 的狀況。
process 通常會設定 dynamic 模式,也就是根據 server 機器規格,設定最小數量(pm.start_servers),跟動態擴展的最大數量(pm.max_children),若在短時間大量請求時,會花費大量 CPU 去 fork 新的 process。另外 process 也會佔用記憶體資源,即時是閒置的狀態。
未支援長連結(ex: WebSocket)。
為了解決高併發時,啟動新 process 初始化問題,新的架構 Laravel Octane + RoadRunner 誕生了: