【速報】サーバ 1 台で 10,000 rps も夢じゃない? Laravel Octane 1.0 リリース
つい数時間前、新しい Laravel の First Party ライブラリが正式リリースされました。 Laravel Octane と呼ばれています。
これはどんなライブラリか一行で説明すると、 「php-fpm に置き換わるミドルウェアを使って、 Laravel アプリケーションを超高速でさばくためのライブラリ」 です。
現在の一般的な PHP アプリケーションは、 nginx や Apache の裏側で php-fpm や mod_php を使ってサーブしています。
その利点として、「毎リクエストごとにメモリを解放することで、メモリリークなどを起こさない」ようになっています。
逆にいえば、毎リクエストごとに1から必要な変数をメモリに展開する必要があるため、スタートアップ速度がサービスの規模に比例して遅くなっていく、ということです。
もちろん PHP 8.0 で入った JIT 含め、 Opcache によるキャッシュで昔の PHP よりははるかに速度は向上しています。しかし、同条件では golang や .NET など常駐するアプリケーションの方がパフォーマンスが優れているのは確かです。
Laravel Octane はパフォーマンスをさらに向上させるため、 RoadRunner または Swoole と呼ばれるミドルウェアを用いて Laravel アプリケーションを動作させます。
RoadRunner は golang で作られた PHP サーバ/ロードバランサ―/プロセスマネージャで、 PHP プロセスをバックグラウンドで動かし、 IPC(プロセス間通信)によってリクエストとレスポンスを行き来させます。
Swoole は C++ で作られた PHP extension で、これまで言語機能としては存在しなかったイベント駆動 & コルーチンベースの並列処理を PHP で行えるようにするものです。
現在 Laravel Octane は PHP 8.0/ Laravel 8 以上でのみ動かすことが可能です。
元々 RoadRunner 側(Spiral)で roadrunner-laravel ブリッジライブラリが提供されていましたが、今後は Octane が公式サポートすることになるので、こちらは使われなくなっていくのではないかと思います。
Swoole も laravel-swoole が提供されていましたが、こちらも使われなくなっていくのではないでしょうか。
今後のミドルウェア選定の中で、 php-fpm + nginx/Apache のコンビではなく、 Octane を採用するといった流れが生まれてくるかもしれませんね。
ちなみに、現在 Octane のドキュメントはリポジトリの README にまとめられていますが、そのうち laravel.com に移される予定だそうです。
Discussion