ホームページ  >  記事  >  バックエンド開発  >  100 万レベルの PHP Web サイト アーキテクチャ ツールボックス_PHP チュートリアル

100 万レベルの PHP Web サイト アーキテクチャ ツールボックス_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 14:51:57730ブラウズ

世界最大の PHP サイトである Facebook のバックエンド テクノロジーについて学んだ後、今日は 100 万レベルの PHP サイトである Poppen.de の Web サイト アーキテクチャについて学びます。 Poppen.de はドイツのソーシャル ネットワーキング サイトです。Facebook や Flickr と比べると小規模な Web サイトですが、優れたアーキテクチャを備えており、Nigix、MySql、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite などの多くのテクノロジーが統合されています。 、Red5とツン。

Poppen.de には現在 200 万人の登録ユーザー、20,000 人の同時ユーザー、1 日あたり 200,000 件のプライベート メッセージ、1 日あたり 250,000 回のログインがあります。プロジェクト チームには 11 人の開発者、2 人のデザイナー、2 人のシステム管理者がいます。同サイトのビジネスモデルはフリーミアムモデルを採用しており、ユーザーの検索や友達へのメッセージ送信、写真や動画のアップロードなどの機能が利用できる。

ユーザーが無制限にメッセージを送信したり、写真をアップロードしたりしたい場合は、ニーズに応じてさまざまな種類の会員サービスに料金を支払う必要があり、ビデオチャットやウェブサイト上の他のサービスでも同じ戦略が使用されます。

Nginx

Poppen.de のすべてのサービスは Nginx サービスに基づいています。フロントエンドには 2 台の Nginx サーバーがあり、ピーク時に 1 分あたり 150,000 リクエストの負荷を処理します。各マシンは 4 年前のもので、CPU が 1 つと RAM が 3 GB しかありません。 Poppen.de には 3 つの独立した画像サーバーがあり、3 つの Nginx サーバーが *.bilder.poppen.de に毎分 80,000 リクエスト サービスを提供します。

Nginx アーキテクチャの優れた設計は、多くのリクエストが Memcached によって処理されるため、リクエストは PHP マシンに直接アクセスせずにキャッシュからコンテンツを取得することです。たとえば、ユーザー プロファイルが Web サイトで集中的に処理する必要があるコンテンツである場合、すべてのユーザー プロファイルが Memcached にキャッシュされている場合、リクエストは Memcached からコンテンツを直接取得します。 Poppen.de の Memcached は 1 分あたり 8,000 リクエストを処理できます。

アーキテクチャにはローカル画像キャッシュを提供する 3 つの Nginx 画像サーバーがあり、ユーザーは画像を中央ファイル サーバーにアップロードします。 3 つの Nginx のいずれかからイメージが要求されたとき、そのイメージがサーバー上にローカルに存在しない場合は、キャッシュとサービスのために中央のファイル サーバーからサーバーにダウンロードされます。この負荷分散された分散イメージ サーバー アーキテクチャ設計により、プライマリ ストレージ デバイスの負荷を軽減できます。

PHP-FPM

このウェブサイトはPHP-FPMで動作します。デュアル CPU と 6 GB のメモリを備えた 28 台の PHP マシンがあり、それぞれが 100 個の PHP-FPM ワーカー スレッドを実行しています。 APC を有効にして PHP5.3.x を使用します。 PHP5.3 では、CPU とメモリの使用量を 30% 以上削減できます。

プログラムコードはSymfony1.2フレームワークに基づいて開発されています。 1 つは外部リソースを利用できること、もう 1 つはプロジェクト開発の進捗を向上させることができると同時に、よく知られたフレームワーク上で新しい開発者がチームに参加しやすくなることです。完璧なものはありませんが、Symfony フレームワークから多くのメリットを得ることができ、チームは Poppen.de のビジネス開発により集中できるようになります。

Webサイトのパフォーマンスの最適化には、Facebookがオープンソース化したクラスライブラリであるXHProfを使用します。このフレームワークはカスタマイズと構成が非常に簡単で、最も高価なサーバー計算をキャッシュできます。

MySQL

WebサイトのメインRDBMSはMySQLです。 Web サイトには複数の MySql サーバーがあり、4CPU、32 GB のサーバーには、基本情報、写真の説明情報などのユーザー関連情報が保存されます。このマシンは 4 年間使用されており、次の計画では共有クラスターに置き換える予定です。データ アクセス コードを簡素化するために、設計は依然としてこのシステムに基づいています。 Web サイト内のほとんどの情報 (写真、ビデオ、メッセージなど) はユーザー中心であるため、データの分割はユーザー ID に基づいて行われます。

マスター・スレーブ・スレーブ構成アーキテクチャでユーザーフォーラムサービスを提供するサーバーは3台あります。スレーブ サーバーは Web サイト上にカスタム メッセージを保存する役割を担っており、現在 2 億 5,000 万件のメッセージが存在します。他の 4 台のマシンはマスター/スレーブ構成になっています。さらに、ユーザー アクセス統計などの集中的な書き込み操作データを特に処理するために、4 台のマシンが NDB クラスターに構成されています。

データテーブルの設計では、関連付け操作を回避し、できるだけ多くのデータをキャッシュするように努める必要があります。もちろん、データベースの構造仕様は完全に破壊されています。したがって、検索を容易にするために、データベース設計ではデータ マイニング テーブルが作成されます。ほとんどのテーブルは MyISAM タイプのテーブルであり、高速な検索が可能です。現在の問題は、完全にロックされているテーブルが増えていることです。 Poppen.de は、XtraDB ストレージ エンジンへの移行を検討しています。

Memcached

ウェブサイトのアーキテクチャにはかなりの数の Memcached アプリケーションがあり、45 GB 以上のキャッシュと 51 ノードを備えています。セッション、ビューキャッシュ、関数実行キャッシュなどがキャッシュされます。アーキテクチャには、レコードが変更されたときにデータをキャッシュに自動的に更新するシステムがあります。将来的にキャッシュ更新を改善するために考えられるソリューションは、新しい Redis Hash API または MongoDB を使用することです。

うさぎMQ

2009年半ばにアーキテクチャでRabbitMQを使い始めた。これは、LVS の背後で 2 つの RabbitMQ サーバーを実行する、このアーキテクチャへの展開と集中化が容易な優れたメッセージング ソリューションです。先月、より多くのものがキューに統合されました。つまり、一時は 28 台の PHP サーバーが 1 日あたり 500,000 件のリクエストを処理していました。ログ、電子メール通知、システム メッセージ、画像のアップロードなどをこのキューに送信します。

PHP-FPM の fastcgi_finish_request() 関数を使用して、キュー メッセージを統合し、メッセージをキューに非同期的に送信します。この関数は、システムが HTML または JSON 形式の応答をユーザーに送信する必要があるときに呼び出されます。これにより、ユーザーは PHP スクリプトがクリーンアップするのを待つ必要がなくなります。

このシステムは、アーキテクチャのリソース管理を改善できます。たとえば、ピーク時には、サービスは 1 分あたり 1,000 件のログイン リクエストを処理できます。これは、ユーザーのログイン時間を節約するために、ユーザー テーブルに対して 1000 件の同時更新があることを意味します。キュー メカニズムのおかげで、これらのクエリは逆の順序で実行できます。処理速度を上げる必要がある場合は、キュー プロセッサを追加するだけでよく、構成を変更したり新しいノードを展開したりせずに、クラスタにサーバーを追加することもできます。

CouchDB

ログストレージ CouchDB は 1 台のマシン上で実行されます。モジュール/動作、またはエラー タイプなどに基づいて、このマシン上でログ クエリ/グループ化を実行できます。これは問題を特定するのに非常に役立ちます。ログ集約サービス CouchDB を使用する前は、ログを分析して問題点を特定するには、PHP サーバーに 1 つずつログインする必要があり、非常に面倒でした。すべてのログがキューに集中して CouchDB に保存されるようになり、問題の検査と分析を一元的に実行できるようになりました。

グラファイト

ウェブサイトはGraphiteを使用してリアルタイムのウェブサイト情報を収集し、統計を作成します。すべてのモジュール/動作のリクエストから、Memcached のヒットとミス、RabbitMQ ステータスの監視、Unix ロードなどまで。 Graphite サービスでは、1 分あたり平均 4,800 回の更新操作が行われます。 Practice は、Web サイトで何が起こっているかを監視するのに非常に役立つことが証明されており、そのシンプルなテキスト プロトコルと描画機能は、監視が必要なシステム上でプラグ アンド プレイ方式で簡単に使用できます。

優れた点の 1 つは、Graphite を使用して Web サイトの 2 つのバージョンを同時に監視することです。 Symfony フレームワークの新しいバージョンは 1 月にデプロイされ、以前のコードはバックアップとしてデプロイされました。これは、Web サイトがパフォーマンスの問題に直面する可能性があることを意味します。したがって、Graphite を使用して 2 つのバージョンをオンラインで比較できます。

新しいバージョンの Unix 負荷メーターが高いことがわかったので、XHProf を使用して 2 つのバージョンのパフォーマンス分析を実行し、問題を特定しました。

赤5

このウェブサイトでは、ユーザー向けに 2 種類のビデオ サービスも提供しています。1 つはユーザー自身がアップロードしたビデオ、もう 1 つはユーザーが対話してビデオを共有するビデオ チャットです。 2009 年半ばまでに、ユーザーに毎月 17 TB のトラフィック サービスを提供する予定です。

ツン

Tsung は Erlang で書かれた分散ベンチマーク分析ツールです。 Poppen.de Web サイトでは、主に HTTP ベンチマーク分析および MySQL と他のストレージ システム (XtraDB) の比較分析に使用されます。システムを使用してメイン MySQL サーバーのトラフィックを記録し、それを Tsung のベースライン セッションに変換しました。その後、トラフィックがリプレイされ、Tsung によって数千人の同時ユーザーが研究所のサーバーにアクセスするようになります。これにより、実験環境を実際のシーンに非常に近づけることができます。

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/371668.html技術記事世界最大の PHP サイトである Facebook のバックエンド テクノロジーについて学んだ後、今日は 100 万レベルの PHP サイトである Poppen.de の Web サイト アーキテクチャについて学びます。 Poppen.de はドイツのソーシャル ネットワーキング サイトです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。