100 万レベルの Web サイト アーキテクチャを構築するための PHP テクノロジーが明らかに: Poppen.de ドイツのソーシャル ネットワーク
世界最大の PHP について学んだ後 サイトと Facebook のバックエンド テクノロジーに続いて、今日は 100 万レベルの PHP サイトである Poppen.de の Web サイト アーキテクチャについて学びます。 Poppen.de はドイツのソーシャル ネットワーキング サイトです。Facebook や Flickr と比べると小規模な Web サイトですが、優れたアーキテクチャを備えており、Nigix、MySql などの多くのテクノロジーが統合されています。 、CouchDB、Erlang、Memcached、RabbitMQ、PHP、Graphite、Red5、Tsung。
統計
◆登録ユーザー数 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 サーバーは、1 分あたり 80,000 リクエスト サービスの *.bilder.poppen.de を提供します。
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フレームワークに基づいて開発されています。まず、外部リソースを使用できることです。 これにより、プロジェクト開発の進捗が向上し、新しい開発者がよく知られたフレームワークのチームに参加しやすくなります。完璧なものはありませんが、Symfony フレームワークを最大限に活用することはできます。 多くのメリットがあり、チームは Poppen.de のビジネス開発により集中できるようになります。
ウェブサイトのパフォーマンスの最適化には、Facebook がオープンソース化したクラス ライブラリである XHProf を使用します。このフレームワークはカスタマイズと構成が非常に簡単で、最も高価なサーバー計算をキャッシュできます。
MySQL
MySQL ウェブサイトです 主なRDBMS。 Web サイトには複数の MySql サーバーがあり、4CPU、32 GB のサーバーには、基本情報、写真の説明情報などのユーザー関連情報が保存されます。この機械は4年間使用されました 年、次のステップはそれを共有クラスターに置き換えることです。データ アクセス コードを簡素化するために、設計は依然としてこのシステムに基づいています。 Web サイト内の情報のほとんどはユーザー ID に基づいているため、ユーザー ID に従ってデータを分割します。 写真、ビデオ、メッセージなどを中心にします。
マスター/スレーブ/スレーブ構成アーキテクチャでユーザー フォーラム サービスを提供するサーバーが 3 台あります。スレーブ サーバーは Web サイト上にカスタム メッセージを保存する役割を担っており、現在 2 億 5,000 万件のメッセージが存在します。他の 4 台のマシンはマスター/スレーブ構成になっています。さらに、ユーザー アクセス統計などの集中的な書き込み操作データを特に処理するために、4 台のマシンが NDB クラスターに構成されています。
番号 データ テーブルの設計では、関連付け操作をできる限り回避し、できるだけ多くのデータをキャッシュする必要があります。もちろん、データベースの構造仕様は完全に破壊されています。したがって、検索を容易にするために、データベース設計ではデータ マイニング テーブルが作成されます。大きい 一部のテーブルは MyISAM タイプのテーブルであり、高速な検索が可能です。現在の問題は、完全にロックされているテーブルが増えていることです。 Poppen.de は、XtraDB ストレージ エンジンへの移行を検討しています。
Memcached
ネット Web サイトのアーキテクチャには非常に多くの 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 に保存されるため、問題の検査と分析を一元的に実行できるようになります。
グラファイト
ネット この Web サイトでは、Graphite を使用してリアルタイムの Web サイト情報を収集し、統計を作成します。すべてのモジュール/動作のリクエストから、Memcached のヒットとミス、RabbitMQ ステータスの監視、Unix ロードなどまで 待って。 Graphite サービスでは、1 分あたり平均 4,800 回の更新操作が行われます。 Practice は、Web サイトで何が起こっているかを監視するのに非常に役立つことが証明されており、その単純なテキスト プロトコルと描画機能は簡単にプラグ アンド プレイできます。 この方法は、監視が必要なあらゆるシステムで使用できます。
優れた点の 1 つは、Graphite を使用して Web サイトの 2 つのバージョンを同時に監視することです。 Symfony フレームワークの新しいバージョンは 1 月にデプロイされ、以前のコードはバックアップとしてデプロイされました。これは、Web サイトがパフォーマンスの問題に直面する可能性があることを意味します。したがって、Graphite を使用して 2 つのバージョンをオンラインで比較できます。
新しいバージョンの Unix 負荷メーターが高いことがわかったので、XHProf を使用して 2 つのバージョンのパフォーマンス分析を実行し、問題を特定しました。
レッド5
この Web サイトでは、ユーザーに 2 種類のビデオ サービスも提供しています。1 つはユーザー自身がアップロードしたビデオ、もう 1 つはユーザーが対話してビデオを共有するビデオ チャットです。 2009 年半ばまでに、ユーザーに毎月 17 TB のトラフィック サービスを提供する予定です。
ツン
ツン Erlang で書かれた分散ベンチマーク分析ツールです。主に Poppen.de Web サイトで HTTP ベンチマーク分析と MySQL と他のストレージ システム (XtraDB) の比較に使用されます。 分析。システムを使用してメイン MySQL サーバーのトラフィックを記録し、それを Tsung のベースライン セッションに変換しました。その後、トラフィックが再生され、Tsung は数千の同時ユーザー アクセス実験を生成します。 ルームサーバー。これにより、実験環境を実際のシーンに非常に近づけることができます。