ホームページ バックエンド開発 PHPチュートリアル Facebook、世界最大の PHP サイトのバックエンド技術の探求

Facebook、世界最大の PHP サイトのバックエンド技術の探求

Jun 13, 2016 pm 01:21 PM
cassandra facebook hadoop memcached 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 サイトでご覧いただけます。 オープンソースのページが見つかりました。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

今まで知らなかったことを後悔している 7 つの PHP 関数 今まで知らなかったことを後悔している 7 つの PHP 関数 Nov 13, 2024 am 09:42 AM

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

母音を文字列にカウントするPHPプログラム 母音を文字列にカウントするPHPプログラム Feb 07, 2025 pm 12:12 PM

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

PHPでの後期静的結合を説明します(静的::)。 PHPでの後期静的結合を説明します(静的::)。 Apr 03, 2025 am 12:04 AM

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? PHPマジックメソッド(__construct、__destruct、__call、__get、__setなど)とは何ですか? Apr 03, 2025 am 12:03 AM

PHPの魔法の方法は何ですか? PHPの魔法の方法には次のものが含まれます。1。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。

See all articles