【6倍速】Laravelの爆速化ライブラリ「Laravel Octane」の導入方法と速度検証
爆速化パッケージ「Laravel Octane」とは
Laravel Octaneとはphp-fpmよりも遥かに高速なミドルウェアを使ったLaravelプロジェクトの爆速化を実現するFirst-Partyライブラリです。昨年にリリースされたばかり。
Go言語で実装された「RoadRunner」とC言語で実装された「Swoole」がミドルウェアとして利用可能で、わずか数コマンドでセットアップできる手軽さも魅力です。
本稿ではCで実装されている「Swoole」を利用したLaravel Octaneの導入方法と速度検証を行います。
UbuntuにさくっとSwoole+Octane導入
# 動作環境 OS -> Ubuntu 20.04 LTS Env -> WSL on Windows10 PHP -> v8.0.14 (CLI) Laravel -> v9.2
Openswooleインストール
Octaneを動作させるために、まずはOpenswooleを導入しましょう。
Mac等その他の導入方法は公式ドキュメントを要参照。
$ sudo su - # ↑rootで入らないと以下でエラー吐きます apt install -y software-properties-common && add-apt-repository ppa:openswoole/ppa -y apt install -y php8.0-openswoole # 8.1なら「php8.1-openswoole」に!
インストールが終わったらphp -iコマンドで正常にextentionとして読み込まれているか確認して下さい。
$ php -i | grep swoole /etc/php/8.0/cli/conf.d/30-openswoole.ini openswoole Author => Open Swoole Group <[email protected]> ︙ ︙ 以下略
Laravel Octaneインストール
Laravelプロジェクト上でLaravel Octaneを導入します。今回はSwooleを使うので[1]を選択。
$ composer require laravel/octane $ php artisan octane:install Which application server you would like to use?: [0] roadrunner [1] swoole > 1
これで設定は完了。
サーバー起動
最後にサーバーを起動してみましょう。オプション等もArtisanコマンドと同じで、–port や –hostも指定可。
$ php artisan octane:start
INFO Server running…
Local: http://127.0.0.1:8000
Press Ctrl+C to stop the server
変更を反映させる
先程のoctane:startを起動すると、アプリケーションがメモリロードされるため、変更が反映されなくなります。
開発中の場合は、ホットリロードを有効する必要がありファイルの変更があると自動で更新してくれます。
詳しくはこちら
npm install --save-dev chokidar
php artisan octane:start --watch
INFO Application change detected. Restarting workers…
何の設定もせずとも表示時間が6倍短縮
ベンチマークでは高速化した!と言っても実際の所どうなの?という疑問に答えるべく実際にArtisanサーバーとOctaneサーバーでの比較を行ってみました。
Welcomeページの表示
まずはLaravelを導入したら入っているデフォルトのWelcomeページで速度検証してみました。
※記事最後にApache Benchテストもあります
Artisan serve | 93.70ms |
Octane:start | 15.34ms |
6.01倍の高速化が結果として得られました。飛躍的な速度向上が見られてとても感動です。
データベース処理を含む場合
OPcache+JIT導入時に測定した際、データベース等の処理がある場合はあまり速度短縮の効果は得られなかったのですがOctaneの場合は以下の通り。
Artisan serve | 121.59ms |
Octane:start | 36.45ms |
3倍以上時間が短縮されました。
ただ、MongoDBシェルでの処理時間は3msだったため、これはもともとLaravelが重いことも要因の1つではないでしょうか。
Apache Bench(ab)負荷耐久テスト
最後にabテストで負荷をかけて処理時間を競ってみましょう。
今回はWelcomeページに対して1,000回リクエストを投げて完了するまでの時間を測定しました。
1秒間当たりの処理数 | 所要時間 | |
Artisan serve | 52.11回 | 19.188秒 |
Octane:start | 274.18回 | 3.647秒 |
短縮率 | 5.2615倍 |
ログはGitHubにて:https://github.com/ichii731/php-examples/blob/main/laravel_octane_test/ab_test.log
ちなみにアクセスした際の応答時間はOctane:startでサーバー起動したらログとして表示されます。
200 GET / ............................................ 18.70 mb 92.61 ms 200 GET / ............................................. 18.83 mb 4.01 ms 200 GET / ............................................. 18.83 mb 3.91 ms
以上Laravel Octaneのセットアップ手順と速度検証のご紹介でした。