ホームページ >バックエンド開発 >PHPチュートリアル >Facebook、世界最大の PHP サイトのバックエンド技術の探求
世界最大の PHP サイト Facebook のバックエンド技術を探る
正直、この記事を見たとき、思わず再投稿してしまいました。原文はこちらから: http://www.aiitee.com/thread-4289-1-1.html
今年の Facebook F8 開発者カンファレンスでは、51CTO が最新のオープン グラフ戦略とセマンティック検索について学びました。今日は、Facebook の背後にあるソフトウェアについて学び、今日世界で最もアクセス数の多い Web サイトの 1 つである Facebook が、5 億人のユーザーのシステムが常に安定して確実に動作することをどのように保証しているかを見ていきます。
Facebook のスケーラビリティの課題
詳細に入る前に、Facebook がスケールするために行ったソフトウェアの一部を紹介します:
◆ Facebook の月間ページビューは 57000000000 (Google Ad Planner による)
◆ Facebook には、他のすべての写真サイトを合わせたよりも多くの写真があります (Flickr などのサイトを含む)
◆毎月 30 億枚以上の写真がアップロードされます
◆ Facebook のシステム サービスは 1 秒あたり 120 万枚の写真を処理しますが、これには CDN サービスで処理される写真は含まれません
◆毎月 25 億件を超えるコンテンツ (ステータス更新、コメントなど) が共有されます
◆ Facebook には 30,000 台以上のサーバーがあります (この数は昨年のものです)
Facebook 拡張機能が依存するソフトウェア
Facebook は依然としてある程度 LAMP サイトですが、他の要素や多くのサービスを組み込み、現在の慣行を変更するため、通常の LAMP よりもはるかに大規模です。
例:
◆ Facebook は今でも PHP を使用していますが、Web サーバーによってネイティブ コードにオープンできるように、PHP 用のコンパイラーを構築し、パフォーマンスを向上させています。
◆ Facebook は Linux を使用していますが、ネットワーク スループットが特に最適化されています。
◆ Facebook は MySQL を使用していますが、主にキーと値の永続ストアとして、Jions とサーバー ロジックの操作は Web サーバー上で動作します。そこの方が実行しやすいからです。
Facebook の写真を保存するために使用される拡張性の高いオブジェクト ストアである Haystack など、自分で作成したシステムもあります。 Facebook の大規模な環境で実行できるログ システムである Scribe もあります。
それでは、世界最大のソーシャル ネットワーク ウェブサイトで使用されているソフトウェアを紹介しましょう。
Memcached
memcached は、現在インターネット上で最も有名なソフトウェアの 1 つです。 これは、Web サーバーと MySQL サーバーの間のキャッシュ層として使用される分散メモリ キャッシュ システムです (データベース アクセスが遅いため)。
Facebook は長年にわたり、Memcached とその周辺ソフトウェアを最適化するいくつかの方法を提案してきました。ネットワークスタックの圧縮など。
Facebook では、毎秒数十テラバイトのデータが数千の Memcached サーバーにキャッシュされています。 これはおそらく世界最大の Memcached クラスターです。
PHP 用ヒップホップ
スクリプト言語として、PHP はローカル プログラムに比べて動作が遅くなります。 HipHop では、PHP を C++ コードに変換し、それをコンパイルしてパフォーマンスを向上させることができます。 Facebook は PHP に大きく依存しているため、Web サーバーをより効率的に実行できます。
Facebook の小規模なエンジニア チーム (最初は 3 人だけ) が 18 か月かけて HipHop を開発し、現在利用できるようになりました。
干し草の山
Haystack は Facebook の高性能写真保存/検索システムです (厳密にはオブジェクト ストレージなので、必ずしも写真を保存しているわけではありません)。やるべきことはたくさんあります。アップロードされた写真は 20 億枚を超え、それぞれが 4 つの異なる解像度で保存されているため、写真の数は 800 億枚を超えています。
何億枚もの写真を処理できるだけでなく、そのパフォーマンスも重要です。 前述したように、Facebook は 1 秒あたり約 120 万枚の写真を提供しますが、この数には CDN 上の写真は含まれません。
これは驚くべき数字です。 Facebook の画像ストレージの詳細については、51CTO の以前のレポート「Facebook 画像ストレージ アーキテクチャ テクノロジの完全分析」を参照してください。
ビッグパイプ
BigPipe は、Facebook によって開発された動的 Web サービス システムです。 Facebook は、最適なパフォーマンスを実現するために、これを使用して各 Web ページをセクション (「ページレット」と呼ばれる) ごとに処理します。
たとえば、チャット ウィンドウが別個である、ニュース フィードも別個である、などです。 これらのページレットは、ページのレンダリング時に同時に使用でき、ページのレンダリング時に取得されます。プロジェクトの一部がクローズドまたはミッドレンジであっても、ユーザーは Web ページの一部を入手できます。
カサンドラ
Cassandra は、単一障害点のない分散ストレージ システムです。 これは NoSQL 運動の重要な部分であり、オープン ソース コードがあります (Apache プロジェクトにもなりました)。 Facebookは検索機能でこれを使用しています。
Facebook 以外にも Digg などを利用している人もいます。 しかし最近、Twitter は Cassandra を諦めました。 Cassandra の詳細については、51CTO の特別トピック「Running to Freedom?」を参照してください。 Cassandra データベース アプリケーション ガイド」。
書記
Scribe は、Facebook が社内で広く使用している柔軟なログ システムです。 Facebook での大規模なログ記録を処理でき、Facebook には数百のログ記録カテゴリがあり、自動的に新しいログ記録カテゴリを処理できます。
Hadoop と Hive
Hadoop は、ビッグ データに対する操作を実行できるオープン ソースの Map-Reduce 実装です。 Facebook はこれをデータ分析に使用しています (Facebook が大量のデータを持っていることは誰もが知っています)。
Hive は Facebook 発祥で、Hadoop 上で SQL クエリを使用できるようになり、プログラマー以外でも使いやすくなりました。
Hadoop と Hive はオープンソース (Apache プロジェクト) であり、Yahoo や Twitter など多くのフォロワーがいます。
倹約
Facebook では複数の異なる言語と異なるサービスが使用されます。 PHP は最終的にフロントエンドに使用され、Erlang はチャットに使用され、Java と C++ もさまざまな場所で使用され、おそらく他の言語も使用されます。 Thrift は社内で開発されたクロスランゲージ フレームワークで、言語を接続して連携して相互に対話できるようにします。
これにより、Facebook は言語を超えた開発を継続しやすくなります。
Facebook は Thrift をオープンソース化しました。 Thrift にさらに多くの言語サポートが追加されました。
ワニス
Varnish は、ロード バランサーとして機能し、超高速で提供できるコンテンツをキャッシュする HTTP アクセラレータです。
Arnish は Facebook で写真やプロフィール写真を処理するために使用され、毎日何十億ものリクエストを処理します。 他のものと同様、Varnish はオープンソースです。
Facebook をスムーズに運営し続けるためのその他の事項
私たちが言及したソフトウェアは Facebook システムを構成し、それを大規模に実行するのに役立ちます。 ただし、このような大規模なシステムを処理するのは複雑な作業であるため、Facebook をスムーズに実行し続けるために他にいくつかのことを列挙します。
プログレッシブリリースとダークローンチ
Facebook には、異なるユーザーに対して 2 つの異なるシステムを実行できる、ゲートキーパー システムと呼ばれるものがあります。 これにより、Facebook は新しい機能を段階的にリリースできるようになります。
/B テスト、Facebook 従業員のみに特定の機能をリリースするなど。
Gatekeeper は、Facebook が「ダーク スタート」を実装できるようにすることもできます。これは、ユーザーが使用する前に特定の機能をアクティブ化します (ユーザーが認識しないため、ダーク スタートと呼ばれます)。
これは、正式なリリース前にいくつかの機能不全やその他の問題を明らかにするのに役立つ実際のストレス テストとして機能します。 ダークローンチは通常、正式ローンチの 2 週間前です。
プロファイリングのライブブロードキャストシステム
Facebook は自社のシステムを注意深く監視しており、興味深いことに、実稼働環境でのすべての PHP 関数のパフォーマンスを監視する責任も負っています。 各 PHP 環境の構成と動作を検出します。オープンソース ツール XHProf を使用する
。
シャットダウン機能を段階的に利用してパフォーマンスを向上させます
Facebook の実行中にパフォーマンスの問題が発生した場合、解決策の 1 つは、重要度の低い機能を段階的に無効にして、Facebook の多くのコア機能のパフォーマンスを向上させることです。
言及しなかったこと
ハードウェア関連については触れませんでしたが、これもスケーラビリティを向上させる重要な部分です。たとえば、他の大規模サイトと同様に、Facebook は CDN を利用して静的コンテンツを処理します。 Facebookには、
巨大なデータセンターは、より多くのサービスを拡張するのに役立ちます。
Facebook のオープンソース プロット
Facebook は、Linux、Memcached、MySQL、Hadoop などのオープン ソース ソフトウェアを使用 (および支援) しているだけでなく、社内で開発されたソフトウェアの多くにも貢献しています。
Facebook は、FriendFeed チームが開発した高性能 Web サーバー フレームワークである Tornado もオープンソース化しました。オープンソース ソフトウェアのリストは、Facebook の Web サイトでご覧いただけます。
オープンソースのページが見つかりました。