ホームページ >見出し >PHP は、Web サイトのビッグデータ、大量のトラフィック、および高い同時実行性をどのように解決しますか?

PHP は、Web サイトのビッグデータ、大量のトラフィック、および高い同時実行性をどのように解決しますか?

无忌哥哥
无忌哥哥オリジナル
2018-06-27 14:44:161890ブラウズ

1: ハードウェアに関して

通常の p4 サーバーは、1 日あたり最大約 100,000 の IP をサポートできます。アクセス数が 10W を超える場合、ハードウェアが強力でない場合は、それを解決するために専用のサーバーが必要になります。ソフトウェアを最適化しても役に立ちません。サーバーの速度に影響を与える主な要因は、ネットワーク - ハードディスクの読み取りおよび書き込み速度 - メモリ サイズ - CPU の処理速度です。

2 条件が許せば、通常は Linux オペレーティング システムに MySQL サーバーをインストールするのが最善です。 Apache と nginx に関しては、同時実行性が高い状況では nginx を使用することをお勧めします。Ginx は Apache サーバーの優れた代替手段です。 nginx はメモリ消費量が少なく、公式テストでは 50,000 の同時接続をサポートできますが、実際の運用環境では、同時接続の数は 20,000 ~ 30,000 に達する可能性があります。 PHP の不要なモジュールをできるだけ閉じて、memcached を使用します。Memcached は、データベースを使用せずにメモリから直接データを転送するため、速度が大幅に向上します。 . Web サイトを最適化し、Web サイトのコンテンツを圧縮して、Web サイトのトラフィックを大幅に節約します。

2 番目に、外部ホットリンクは禁止されています。

外部 Web サイトからの画像やファイルのホットリンクは、多くの場合負荷がかかるため、自分自身の画像やファイルへの外部ホットリンクは厳しく制限されるべきです。幸いなことに、現時点では、Apache を使用するだけでホットリンクを自動的に制御できます。 IIS には、同じ機能を実現できるサードパーティの ISAPI もいくつかあります。もちろん、偽の紹介を使用してコードを介してホットリンクを実現することもできますが、現時点では意図的に偽の紹介をホットリンクに設定する人は多くありません。今のところ無視することも、ウォーターマークを追加するなどの非技術的な手段を使用して解決することもできます。写真に。

3 番目に、大きなファイルのダウンロードを制御します。

大きなファイルをダウンロードすると大量のトラフィックが消費され、非 SCSI ハードドライブの場合、大量のファイルをダウンロードすると

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

4 番目に、メインのトラフィックを迂回するために別のホストを使用します

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

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 リバース プロキシを通じて負荷分散を実現します。

軽量バスと重量バスを効果的に分離します。

各 Web サーバーは DEC を介してすべてのデータベースに接続し、同時にマスターとスレーブに分割できます。

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

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

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

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

は、データ物理ファイルの統合された読み取りと書き込みに使用されます

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

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

ソリューションの特徴:

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

ファイル/ビデオ サーバーと通常の Web サーバーを分離することで、合理的にデータ フローを分散します。データベース サーバー グループを通じてデータベース IO プレッシャーを分散します。

各 Web サーバーは通常、1 つのデータベース サーバーにのみ接続します。

ディスク アレイの導入により、非常に短時間で冗長データベース サーバーに切り替えることができます。システム 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 までご連絡ください。