ホームページ  >  記事  >  PHPフレームワーク  >  Swoole を使用して Laravel のパフォーマンスを向上させる (Shadowfax)

Swoole を使用して Laravel のパフォーマンスを向上させる (Shadowfax)

藏色散人
藏色散人転載
2021-05-25 14:45:442726ブラウズ

以下は、Shadowfax を紹介する laravel のチュートリアル コラムです: Laravel に Swoole の剣を身につけさせます。困っている友達の役に立てば幸いです!

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 を選ぶ理由

もちろん、友人の中には、Github にはすでに同様のオープンソース プロジェクトがあるのに、なぜもう一度車輪の再発明が必要なのかと尋ねる人もいるでしょう。実際にはそうではありません。私は 2016 年の早い時期に Swoole と Laravel の統合を試み始め、2 つの関連プロジェクトをオープンソース化しました。現在、この点で最も星の数が多い swooletw/laravel-swoole はフォークです以前リリースしたhuang-yi/のlaravel-swoole-http。しかし、私は自分のプロジェクトを推進しませんでした。なぜなら、以前のプロジェクトには多かれ少なかれ問題があり、コルーチンをうまくサポートできなかったこと、そしてコルーチンがたまたま Swoole の最強の武器であることをよく知っていたからです。そのため、全員が諦めました。

これで、

Shadowfax はコルーチンを非常によくサポートできるようになりました 、Swoole のコルーチン機能を安全に有効にすることができます。さらに、Shadowfax はコルーチン環境におけるデータベース接続の問題も解決し、Swoole のワンクリック コルーチンを有効にすると、Shadowfax はデータベース接続用の接続プールを自動的に作成します。最も重要なことは、これらすべてがアプリケーション コードのレベルでは無意味であるということです。Shadowfax ではコードの記述方法を変更する必要がないため、精神的な負担なく通常どおりビジネス コードを記述することができます。

最後に、私が説明したいのは、Shadowfax は意図的に Laravel に Swoole を使用できる機能を与えたわけではないということです。その主な目的は:

Laravel の開発経験を損なうことなく、最小限のコストで Laravel を改善することです。パフォーマンス###。また、Laravel 自体は従来の PHP モードで実行されるフレームワークであり、Swoole に適していないため、開発者には Laravel で Swoole のインターフェイスを使用することはお勧めしません。使用中に何か問題が発生しました。 Laravel アプリケーションが Swoole インターフェイスを使用していない場合、プログラムは PHP-FPM モードでも実行できることを意味します。Swoole で実行中のプログラムに問題が発生した場合は、すぐに PHP-FPM モードに切り替えることができます。プログラムの可用性を確保できます。

以上がSwoole を使用して Laravel のパフォーマンスを向上させる (Shadowfax)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。