Swoole は PHP にとって鋭い剣であると言えます。多くの PHPer は、高同時実行性の夜明けを目にしてきました。 Swoole を使用して Laravel のパフォーマンスを向上させることは、非常に価値のある投資であり、これにより、Swoole の高いパフォーマンスを得ることができるだけでなく、Laravel の高い効率も考慮に入れて、両方の長所を得ることができます。 Shadowfax は拡張パッケージで、シンプルで使いやすく、開発者が Laravel アプリケーションを Swoole 上で実行できるように迅速に移行するのに役立ちます。
まず、Shadowfax を使用して実行されている Laravel アプリケーションのパフォーマンスを見てみましょう。
今回は、Laravel の最新バージョンに基づいて、wrk
をベンチマーク ツールとして使用します。 7, ただし、セッション関連のミドルウェアは削除されています。 Laravel はデフォルトでセッションが有効になっており、セッションドライバーはファイルなので、この場合テストを実行するとリクエストごとにセッションファイルが作成されるため、結果は意味がありません。 (パフォーマンスを追求するアプリケーションはファイルをセッション ドライバーとして使用しないでください)
環境 1:
- ハードウェア: 1 CPU、4 コア、16GB メモリ
- MacOS 10.15.3
- PHP 7.3.12 (opcache 有効)
- Swoole 4.4.13
- Shadowfax 2 (20 ワーカー プロセス)
この環境は私個人の Macbook Pro の方がパフォーマンスが良いです。 wrk を使用して 4 つのスレッドを開始し、200 同時実行でストレス テストを実施しました:
wrk -t4 -c200 http://127.0.0.1:1215/
結果は 12430 rps:
Running 10s test @ http://127.0.0.1:1215/ 4 threads and 200 connections Thread Stats Avg Stdev Max +/- Stdev Latency 26.44ms 31.44ms 212.73ms 84.28% Req/Sec 3.13k 839.99 6.07k 65.75% 124418 requests in 10.01s, 312.06MB read Socket errors: connect 0, read 54, write 0, timeout 0 Requests/sec: 12430.20 Transfer/sec: 31.18MB
環境 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 rps:
Running 10s test @ http://127.0.0.1:1215/ 2 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 25.06ms 12.11ms 85.92ms 60.94% Req/Sec 4.02k 41.46 4.08k 79.79% 40321 requests in 10.08s, 101.13MB read Requests/sec: 4001.76 Transfer/sec: 10.04MB
パフォーマンスはかなり良いですか?従来のPHP-FPMと比べて大幅に改善されました。
インストールと使用
Shadowfax のインストールは非常に簡単で、必要な手順は 2 つだけです:
最初の手順は、Composer を使用して Shadowfax を Laravel プロジェクトにインストールすることです。 :
composer require huang-yi/shadowfax
2 番目のステップは、Laravel の Artisan コマンド shadowfax:publish
を使用して構成ファイルを公開することです:
php artisan shadowfax:publish
実行後、プロジェクトのルート ディレクトリにある構成ファイルshadowfax.yml
という名前のファイルが作成されます。環境に応じて調整する必要があります。もちろん、このファイルは .env
ファイルと同様に、自動的に .gitignore
に追加されますが、環境によっては設定が異なる場合があります。
これで、Shadowfax コマンドを使用してサービスを開始できるようになります:
php shadowfax start
デフォルト構成の場合は、http://127.0.0.1:1215## を通じてアクセスできます。 # あなたの申請。もちろん、これは単なる使用目的であり、詳細については、Shadowfax プロジェクトのホームページをご覧ください。
Shadowfax はコルーチンを非常によくサポートできるようになりました 、Swoole のコルーチン機能を安全に有効にすることができます。さらに、Shadowfax はコルーチン環境におけるデータベース接続の問題も解決し、Swoole のワンクリック コルーチンを有効にすると、Shadowfax はデータベース接続用の接続プールを自動的に作成します。最も重要なことは、これらすべてがアプリケーション コードのレベルでは無意味であるということです。Shadowfax ではコードの記述方法を変更する必要がないため、精神的な負担なく通常どおりビジネス コードを記述することができます。
最後に、私が説明したいのは、Shadowfax は意図的に Laravel に Swoole を使用できる機能を与えたわけではないということです。その主な目的は:Laravel の開発経験を損なうことなく、最小限のコストで Laravel を改善することです。パフォーマンス###。また、Laravel 自体は従来の PHP モードで実行されるフレームワークであり、Swoole に適していないため、開発者には Laravel で Swoole のインターフェイスを使用することはお勧めしません。使用中に何か問題が発生しました。 Laravel アプリケーションが Swoole インターフェイスを使用していない場合、プログラムは PHP-FPM モードでも実行できることを意味します。Swoole で実行中のプログラムに問題が発生した場合は、すぐに PHP-FPM モードに切り替えることができます。プログラムの可用性を確保できます。