ホームページ  >  記事  >  バックエンド開発  >  限られたリソース内で PHP サーバーの同時実行機能を最大化する方法

限られたリソース内で PHP サーバーの同時実行機能を最大化する方法

藏色散人
藏色散人転載
2020-10-16 14:24:164049ブラウズ


アプリケーションがサプライヤーからの購入に 5W 人民元を使用すると仮定します。登録当日、多数の候補者が殺到し、同時リクエストの数が急増します。 30W の場合、システムがシャットダウンしてサービスが拒否され、候補者が苦しむことになります。 登録できません。5W の rmb は 30W の同時実行をサポートできますか?

しかし、私たちとしては、問題を別の角度から提起したほうがよいでしょう。「限られたリソース内でサーバーの同時実行能力を最大限に高める方法」です。あなたが技術リーダーだと仮定すると、大量の同時実行を伴うプロジェクトをどのように設計し、構築するでしょうか?

まず、このプロジェクトの概要を説明します。上記の説明から、このプロジェクトのボトルネックは「読み取り」ではなく「同時書き込み」であることがわかります。 " したがって、リソース割り当ての観点から、" "書き込み" ティルトが可能です。ここではすべてのデータを Redis に書き込みます。さらに、MySQL の読み取り操作を Redis に移行するために最善を尽くす必要もありますが、MySQL によって実行される作業は、従来の非同時読み取りおよび書き込み操作に偏っています。

限られたリソース内で PHP サーバーの同時実行機能を最大化する方法

#サーバー#ユーザーリクエストが届くと、ロードバランサーはリクエストを各サーバーにロードします

限られたリソース内で PHP サーバーの同時実行機能を最大化する方法これは、1 CPU、4 GB、および PHP 7 の構成を使用した symfony のストレス テスト データです。

限られたリソース内で PHP サーバーの同時実行機能を最大化する方法上の図のデータは swoole 公式 Web サイトから取得したもので、実際のビジネス ロジックの実行を追加した後、常駐メモリ起動メソッドを使用すると、次のことがわかります。 , 16 台のサーバーが必要な上記の問題は、3 台のローエンド サーバーで解決できます。

データベース

実際、多くの人は、現在の多くのインターネット プロジェクトのボトルネックがデータベース I/O に集中していることを理解しているでしょう。この領域には、特にさまざまな言語間の大きなギャップ。広く批判されている PHP-FPM 起動方法を含め、swoole やその他の方法を使用して置き換えることもできます。したがって、このプロジェクトではデータベースに重点を置き、Redis を使用してそれを解決してみます。もちろん、具体的なコードでは、事前に一定数のデータ接続プールを準備する必要もあります。さらに、MongoDB の書き込み速度は、同じ構成では MySQL よりもはるかに高速ですが、Redis と比較すると明らかな欠点がまだあるとも考えられます。

登録とログイン

登録とログインは実際には 2 つの部分に分割する必要があり、それぞれ「書き込み」と「読み取り」に対応します。同時読み取りと書き込みが多い場合、MySQL を直接使用すると予想どおり爆発的に大きくなります。したがって、プロジェクト全体を構築するプロセス中に、ユーザー データを Redis にキャッシュできます。 「書き込み」の問題: ユーザーの数が不明で、同時実行の量が多い場合は、ユーザー データをデータベースに直接保存しないことを好みます。ユーザーのウェアハウス方法を設定するスイッチまたはしきい値を設計できます。同時実行性が大きい場合、ユーザーは MQ を介して非同期にウェアハウスできますが、通常の場合、ユーザーは通常どおりウェアハウスできます。

フォームを送信

このプロジェクトは一般的なフラッシュセールではなく、即時通知が必要なため、プロジェクトの設計により難易度が大幅に軽減されます。フォームの送信機能は登録と似ており、データをデータベースに非同期で完全にロードし、バックグラウンドで確認できます。

概要

他の CDN と MySQL がマスター/スレーブを必要とするかどうかについては、実際の状況によって異なりますので、詳しくは説明しません。理論的には、このプロジェクトの問題を解決するには、PHP-FPM を使用すると約 19,000 元/月、swoole を使用すると約 4,500 元/月かかります。ここで私は swoole を推奨しているわけではありません。それは、大規模な同時プロジェクトに直面するとき、特にビジネス ロジックが比較的複雑な場合、常駐メモリを使用することで問題をより適切に解決できるということであり、これは言語とは関係ありません。最後に、上記は理論上の段階にすぎず、実際のデータについてはさらなるテストが必要であることに注意してください。記事の素材はインターネット上からのものですので、間違った記述がございましたらご指摘ください。

以上が限られたリソース内で PHP サーバーの同時実行機能を最大化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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