ホームページ  >  記事  >  バックエンド開発  >  php、nginx、apache、mysql PHP は大規模な Web サイトのトラフィックと高い同時実行の問題をどのように解決しますか" />

php、nginx、apache、mysql PHP は大規模な Web サイトのトラフィックと高い同時実行の問題をどのように解決しますか" />
巴扎黑
巴扎黑オリジナル
2016-11-09 13:40:141232ブラウズ

まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分であるかどうかを確認します。
通常の P4 サーバーは、通常、1 日あたり最大 100,000 の独立した IP をサポートできます。アクセス数がこれを超える場合は、まずより高性能の専用サーバーを構成する必要があります。そうしないと、どのように最適化しても問題は解決されません。パフォーマンスの問題を完全に解決することは不可能です。

2 番目に、データベース アクセスを最適化します。 もちろん、データベースにアクセスする必要がまったくないため、フロント デスクを完全に静的化することが最善ですが、頻繁に更新される Web サイトの場合、静的化では特定の機能を満たせないことがよくあります。
キャッシュ テクノロジーは、動的データをキャッシュ ファイルに保存するもう 1 つのソリューションであり、動的 Web ページはデータベースにアクセスすることなくこれらのファイルを直接呼び出します。WordPress と Z-Blog はどちらもこのキャッシュ テクノロジーを広く使用しています。

実際にデータベースにアクセスすることが避けられない場合は、Select * from などのステートメントの使用を避け、大量の SQL クエリを回避してください。短い期間。

第三に、外部ホットリンクは禁止されています。
外部 Web サイトからの画像やファイルのホットリンクは、多くの場合負荷がかかるため、自分の画像やファイルの外部からのホットリンクは厳しく制限する必要があります。幸いなことに、現時点では、ホットリンクは参照によって簡単に制御でき、Apache 自体が禁止するように設定できます。ホット リンク。IIS には、同じ機能を実現できるサードパーティの ISAPI もいくつかあります。もちろん、コードを通じて偽の紹介を使用してホットリンクを実現することもできますが、現時点では、意図的に偽の紹介を行う人は多くありません。または、追加するなどの非技術的な手段を使用して解決することもできます。写真に透かしを入れる。

4 番目に、大きなファイルのダウンロードを制御します。
大きなファイルをダウンロードすると大量のトラフィックが消費され、非 SCSI ハードドライブの場合、大量のファイルをダウンロードすると CPU が消費され、Web サイトの応答性が低下します。したがって、2M を超える大きなファイルのダウンロードは提供しないようにしてください。提供する必要がある場合は、大きなファイルを別のサーバーに配置することをお勧めします。

5 番目に、メインのトラフィックを迂回するために別のホストを使用します。
ファイルを別のホストに配置し、ユーザーがダウンロードできるように別のイメージを提供します。たとえば、RSS ファイルが大量のトラフィックを消費していると感じる場合は、FeedBurner や FeedSky などのサービスを使用して、RSS 出力を他のホストに配置します。この方法では、他のユーザーのアクセスによるトラフィック プレッシャーのほとんどが集中します。 FeedBurner のホストと RSS は、あまり多くのリソースを占有しません。

6番目、トラフィック分析および統計ソフトウェアを使用します。
ウェブサイトにトラフィック分析と統計のソフトウェアをインストールすると、どこで大量のトラフィックが消費されているか、どのページを最適化する必要があるかがすぐにわかります。そのため、トラフィックの問題を解決するには、正確な統計分析が必要です。例: Google アナリティクス。

高同時実行性と高負荷の制約: ハードウェア、デプロイメント、オペレーティング システム、Web サーバー、PHP、MySQL、テスト

デプロイメント: サーバーの分離、データベース クラスターとライブラリ テーブルのハッシュ、ミラーリング、ロード バランシング

ロード バランシングの分類: 1) DNS ラウンド ロビン 2) プロキシ サーバーのロード バランシング 3) アドレス変換ゲートウェイのロード バランシング 4) NAT ロード バランシング 5) リバース プロキシ ロード バランシング 6) ハイブリッド ロード バランシング

導入計画 1:

適用範囲 : Web サイトおよびアプリケーション システム静的コンテンツを本体とする Web サイトと、高度なシステム セキュリティ要件が必要なアプリケーション システム。

メインサーバー: メインサーバー

は、プログラムの主要な動作圧力を担い、Webサイトまたはアプリケーションシステムでの動的リクエストを処理します。

は、静的ページを複数の公開サーバーにプッシュします。

は、添付ファイルをファイルサーバーにプッシュします。

セキュリティ要件が高く、主に静的な Web サイトの場合、サーバーを内部ネットワークに配置して、外部ネットワークからのアクセスをブロックできます。

DB サーバー: データベース サーバー

はデータベースの読み取りと書き込みの負荷を負います。

はメイン サーバーとのデータ量の交換のみを行い、外部ネットワーク アクセスをブロックします。

ファイル/ビデオ サーバー: ファイル/ビデオ サーバー

システム内の大規模なシステム リソースと帯域幅リソースを占有するデータ ストリームを伝送します。

大規模な添付ファイルのストレージおよび読み取り/書き込みの倉庫として機能します。自動ビデオ処理機能が搭載されます。

公開サーバー グループ:

は静的ページの公開のみを担当し、Web リクエストの大部分を処理します。

は Nginx を通じて負荷分散デプロイメントを実行します。

導入計画 2:

適用範囲: 動的インタラクティブ コンテンツを主体とする Web サイトまたはアプリケーション システム、負荷が高く十分な予算がある Web サイトまたはアプリケーション システム

Web サーバー グループ:

所有者のない Web サービスこの関係は、並列冗長設計です。

フロントエンド負荷分散装置または Nginx リバース プロキシを通じて負荷分散を実現します。

専用のファイル サーバー/ビデオ サーバーを分割して、軽量バスと重量バスを効果的に分離します。 pass DEC すべてのデータベースを接続し、マスターとスレーブを同時に分割できます。

データベース サーバー グループ:

は比較的バランスのとれたデータベースの読み取りおよび書き込みの負荷に耐えます。

はデータベースの物理ファイルのマッピングを通じて複数のデータベースのデータ同期を実現します。

共有ディスク/ディスクアレイ

は、データ物理ファイルの統一的な読み書きに使用されます

大規模な添付ファイルの保管倉庫に使用されます

システム全体のバランスと冗長性により、IO効率とデータセキュリティを確保します独自の物理ディスク

プログラムの機能:

フロントエンドの負荷分散を通じて Web の負荷を合理的に分散します。

ファイル/ビデオ サーバーと通常の Web サーバーを分離することで、軽いデータ フローを合理的に分散します。

各 Web サーバー グループを通じてデータベース IO の負荷を合理的に分散します。通常、接続されているデータベース サーバーは 1 つだけですが、DEC のハートビート検出により、非常に短時間で冗長データベース サーバーに自動的に切り替えることができます

ディスク アレイの導入により、システム IO 効率が大幅に向上するだけでなく、パフォーマンスも大幅に向上します。データセキュリティ。 。

Web サーバー:

通常の状況では、Web サーバーのリソース使用量の大部分は、Apache によって生成される負荷です。同時接続数が多い場合には、Nginx が適切な代替手段となります。 Apacheサーバー。 Nginx (「エンジン x」) は、ロシアで作成された高性能 HTTP およびリバース プロキシ サーバーです。中国では、Sina、Sohu Pass、NetEase News、NetEase Blog、Kingsoft Xiaoyao.com、Kingsoft iPowerWord、Xiaonei.com、YUPOO Photo Album、Douban、Xunlei Kankan などの多くの Web サイトやチャネルが Nginx サーバーを使用しています。

Nginx の利点:

高い同時接続: 公式テストでは 50,000 の同時接続をサポートできますが、実際の運用環境では、同時接続の数は 20,000 ~ 30,000 に達します。

低メモリ消費量: 30,000 の同時接続の下で、10 個の Nginx プロセスが起動しても、メモリの消費量はわずか 150M (15M*10=150M) です。

組み込みのヘルスチェック機能: Nginx プロキシのバックエンドの Web サーバーがダウンしても、フロントエンドのアクセスは影響を受けません。

戦略: 古い Apache と比較して、リソース使用量が少なく、負荷容量が高い Web サーバーである Lighttpd と Nginx を選択します。

Mysql:

MySQL 自体は強力な負荷容量を備えています。MySQL の最適化には、最終的にはシステムの最適化についての十分な理解が必要となるため、非常に複雑なタスクです。データベース作業には、プログラム開発中に注意を払う必要があるインデックス作成やクエリ効率の向上などのソフトウェア開発テクニックに加えて、短期間のクエリ、読み取りと書き込みが大量に含まれ、主に MySQL の実行効率に影響を与えることは誰もが知っています。ハードウェア機能の観点からは、検索、ディスク IO レベル、CPU サイクル、メモリ帯域幅が影響します。

サーバー上のハードウェアとソフトウェアの条件に基づいてMySQlの最適化を実行します。 MySQL 最適化の中核はシステム リソースの割り当てにあります。これは、より多くのリソースを無制限に MySQL に割り当てることを意味するものではありません。 MySQL 設定ファイルには、最も注目すべきパラメーターがいくつか導入されています:

インデックス バッファーの長さを変更する (key_buffer)

テーブルの長さを変更する (read_buffer_size)

開いているテーブルの最大数を設定する (table_cache)

Right Set低速で長いクエリに対する時間制限 (long_query_time)

条件が許せば、一般に MySQL サーバーを FreeBSD ではなく Linux オペレーティング システムにインストールするのが最善です。

戦略: MySQL の最適化には、ビジネス システムのデータベース読み取りおよび書き込み特性とサーバー ハードウェア構成に基づいてさまざまな最適化計画を策定する必要があり、必要に応じて MySQL のマスター/スレーブ構造をデプロイできます。


PHP:

1. できるだけ少ないモジュールをロードします。

2. Windows プラットフォームの場合は、通常使用する Apache を可能な限り IIS または Nginx を使用します。3. PHP コードのプリコンパイル結果とデータベース結果をキャッシュして、PHP コードの実行速度を向上させます)

eAccelerator、eAccelerator は、動的コンテンツ キャッシュを最適化し、PHP スクリプトのキャッシュ パフォーマンスを向上させ、PHP スクリプトを作成する無料のオープンソース PHP アクセラレータです。コンパイルの高速化 この状態では、サーバー上のオーバーヘッドはほぼ完全に除去されます。

Apc: Alternative PHP Cache (APC) は、無料で公開されている、PHP 用に最適化されたコード キャッシュです。これは、PHP 中間コードをキャッシュおよび最適化するための、無料でオープンかつ堅牢なフレームワークを提供するために使用されます。


memcache: Memcache は、Danga Interactive によって開発された高性能の分散メモリ オブジェクト キャッシング システムであり、データベースの負荷を軽減し、動的アプリケーションでのアクセス速度を向上させるために使用されます。主なメカニズムは、メモリ内に統合された巨大なハッシュ テーブルを維持することです。

Xcache: 中国人によって開発されたキャッシュです。戦略: PHP 用のアクセラレータをインストールします。

プロキシ サーバー (キャッシュ サーバー):

Squid Cache (略して Squid) は、人気のあるフリー ソフトウェア (GNU General Public License) プロキシ サーバーおよび Web キャッシュ サーバーです。 Squid は、Web サーバーのフロントエンド キャッシュ サーバーとして機能し、関連するリクエストをキャッシュして Web サーバーの速度を向上させることから、World Wide Web、ドメイン ネーム システム、およびグループのその他の Web 検索をキャッシュすることまで、幅広い用途に使用できます。ネットワーク リソースを共有し、トラフィックをフィルタリングしてネットワークを保護し、プロキシ ネットワークを介して LAN に接続します。 Squid は主に Unix ライクなシステム上で動作するように設計されています。

戦略: Squid リバース プロキシ サーバーをインストールすると、サーバーの効率が大幅に向上します。

ストレス テスト: ストレス テストは、すべての重要なソフトウェア テスト作業の一部である基本的な品質保証動作です。ストレス テストの基本的な考え方はシンプルです。通常の条件下で手動または自動テストを実行するのではなく、コンピューターの数が少ない、またはシステム リソースが不足している条件下でテストを実行します。通常、ストレス テストが行​​われるリソースには、内部メモリ、CPU 可用性、ディスク容量、ネットワーク帯域幅が含まれます。同時実行性は通常、ストレス テストに使用されます。

ストレス テスト ツール: Webbench、ApacheBench など。

脆弱性テスト: システムの脆弱性には主に、SQL インジェクションの脆弱性、XSS クロスサイト スクリプティング攻撃などが含まれます。セキュリティには、オペレーティング システムの脆弱性、mysql、Apache の脆弱性などのシステム ソフトウェアも含まれますが、これらは通常、アップグレードによって解決できます。

脆弱性テストツール: Acunetix Web Vulnerability Scanner


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。