Facebookアーキテクチャ[終了]


169

私はFacebookのアーキテクチャ、それらが取り組む課題と方法に関する記事や情報を探し求めてきました。彼らが使うものと彼らが使う理由。どのようにスケールするか、何をするための設計上の決定かなど。学習することの主な基盤。このような大量のトラフィックを処理するサイトについて知ることは、建築家などが新しいサイトを設計するときに特定のことを覚えておくための多くの指針を与えます。私が見つけたものを共有しています。

  1. Facebook Science&Social Graph(ビデオ)
  2. Facebookで拡張
  3. Facebookチャットのアーキテクチャ
  4. Facebookブログ
  5. Facebook Cassandraのアーキテクチャとデザイン
  6. Facebookエンジニアリングノート
  7. Quora-Facebookアーキテクチャ
  8. 600Mユーザー向けFacebook
  9. FacebookでのHadoopとその使用法
  10. ErlangのFacebook:チャットアーキテクチャ
  11. Facebookパフォーマンスキャッシュ
  12. Facebook Connectアーキテクチャ

リンクが2つありますが、このサイトの制限により投稿できません。また、誰かがより良いものを持っている場合は共有してください(Facebookにのみ関連している必要はありません)。

PS-この調査を共有するのに適した場所を見つけることができなかったため、このイニシアチブになりました。これが誰かを助けることを願っています。


2
2. Facebookでのスケール(ビデオ)-infoq.com/presentations/Scale-at-Facebook 3. Facebookチャット-infoq.com/news/2008/05/facebookchatarchitecture
Srikar Appalaraju

2
また、highscalability.comは、多くの人気サイトのアーキテクチャについて学ぶのに最適な場所のようです。これがどれほど本当でどれだけ投機的であるかはわかりませんが、それはそこにあり、ただ口に出すためのものです
Srikar Appalaraju '20

1
Facebookのエンジニアリングのブログは、時折そのアーキテクチャおよびスケーリングの課題に重要な洞察力を持っています。
Colin Pickard、2010年

これは技術的には実際の質問ではないため、この質問が削除された場合に備えて、情報をFBタグwikiに移動して、そこに情報を保持することをお勧めします。ありがとう。
ゴードン

@Gordon FB Wikiタグを追加する方法?「Facebook」タグはすでにそこにありませんか?それでは不十分ですか?
Srikar Appalaraju 2013年

回答:


33

まあFacebookは多くの変更を経て、もともと効率的であるように設計されていませんでした。それはその仕事をするように設計されました。私はコードがどのように見えるかまったくわからないので、(明らかにセキュリティと著作権の理由で)コードに関する多くの情報を見つけられないでしょうが、APIを見てください。どれくらいの頻度で変化し、どれだけ正しく、またはまったく機能しないかを確認します。

彼らの最大のエースはHiphopだと思います。 http://developers.facebook.com/blog/post/358 HipHopはご自分で使用できます。https//github.com/facebook/hiphop-php/wiki

しかし、私に尋ねると、それは非常に野心的で、おそらく時間を浪費する作業です。Hiphopがサポートするのはそれほど多くなく、単にすべてをC ++に変換することはできません。これは何を教えてくれるのでしょうか?まあ、それはFacebookがPHP言語を完全に活用していないことを私たちに伝えます。最新の5.3を使用していないので、PHP 4と互換性のあるものはまだたくさんあります。そうしないと、HipHopを使用できませんでした。HipHopは優れたアイデアであり、拡大および拡張する必要がありますが、現在の状態では、新しいPHPアプリを構築している多くの人にとってはあまり役に立ちません。

Resin / Quercusなどを介したPHPからJAVAへの変換もあります。繰り返しますが、すべてをサポートしているわけではありません...

注意すべきもう1つの点は、非標準のPHPモジュールを使用すると、そのコードをC ++またはJavaに変換できなくなることです。ただし、PHPモジュールを見てみましょう。それらはC ++でコンパイルされています。したがって、(XMLの解析などの)処理を行うPHPモジュールを構築できる場合、基本的には(一部の操作を除いて)同じ速度で動作しています。もちろん、再コンパイルする必要があり、コーディングがはるかに困難になるため、あらゆる可能性のあるニーズとアプリ全体に対してPHPモジュールを作成することはできません。

ただし...速度の問題を解決するのに役立ついくつかの便利なPHPモジュールがあります。結局のところ、「クラウド」と呼ばれるこの素晴らしいものがあります。これを使用して、アプリケーション(PHPを含む)をスケーリングできるため、それほど問題になりません。ハードウェアはどんどん安くなっています。Amazonは価格について(再び)値下げしました。

だから、あなたのPHPアプリを1日スケールにする必要があるという考えでコーディングしている限り...あなたは大丈夫だと思いますし、Facebookと彼らが何をしたかさえも私が見ているとは確信が持てません。彼らはそれをしました、それは完全に異なる世界でした、そして今そのインフラストラクチャを保持してそれを維持しようとしています...まあ、あなたはHipHopのようなものを得ます。

では、HipHopはどのように役立ちますか?それはしません。できません。新しく始めました。PHP5.3を使用できます。PHP 5.3フレームワークと、PHP 5.3がSPLライブラリとともにテーブルにもたらすすべての新しい利点を検討し、データベースについても検討することを強くお勧めします。データベースからコンテンツを提供している可能性が高いので、MongoDBや、スキーマレスでドキュメント指向のその他のタイプのデータベースを確認してください。最も「一般的な」タイプのWebサイト/アプリでは、はるかに高速で優れています。

FoursquareやSmugmugのような新しい会社と、新しいテクノロジーを利用している他の会社と、それをどのように使っているかを見てください。Facebookほど成功しているので、私は正直に言って、効率的なWebサイト/アプリを構築するための「方法」についてそれらを検討しません。私は彼らがそこで(彼らの)問題を創造的に解決している非常に(非常に)才能のある人々がいないと言っているのではありません...成功し、そこからアイデアを得るべきではないということです。ソースコード全体を表示できたとしても、それから利益を得ることはできないでしょう。


1
あなたが言ったことのほとんどに同意した。これらのリンクは、好奇心を刺激するためのものです。テクノロジーの一部を見て、「ねえ、それはかっこいい」と言うときがあります...
Srikar Appalaraju

ここで私の答えをランダムに2つ再訪します。#1、私はC ++ではなくC ++と技術的に悪いと思います...しかし、より重要なのは、#2のPhalconは、速度を上げるためにPHP拡張機能に大幅に変換する新しいPHPフレームワークです。もちろん、独自のコードの多くはCで実行されず、使用する他のライブラリもおそらく実行されません。ただし、いくつかの余分なパフォーマンスを絞り出すことは、HipHopによく似た賢いアイデアです。
Tom

...そして、ここでは、そのエースを袖に重ねてもう一度行きます。数年後を振り返ると、このHack言語があります(独自のIDEを備えたHipHopのものから生まれたものです)。より良いものに成長しましたか?わかります。それはあなたを助けることができますか?たぶん、でも今はあなたもFacebookと同じように構築できるようです。約4年しかかかりませんでした=)個人的には、私はクールエイドを飲むのはそれほど速くありません。
トム

1
今、答えを見て、テクノロジーの世界でどのようになっているかに驚いています。HipHopが最新バージョンのPHPをサポートしただけでなく、Facebookはさらに高速なHHVMも開発しました。
Gopi Krishna

ええ、私は時々これに私を連れ戻す通知を受け取ります。状況がどのように変化し、HipHopがどのようにHHVMに進化したかを確認するのは本当に素晴らしいことです(おそらくFacebookが隠された形で再発明しているようです。それは私には理にかなっています。莫大なお金と従業員を抱える大成功を収めている会社の場合...ある時点でR&Dに再投資しないのはどうでしょう?
トム

18

FacebookはLAMP構造を使用しています。Facebookのバックエンドサービスは、C ++、Java、Python、Erlangなど、さまざまなプログラミング言語で記述されており、要件に応じて使用されます。LAMPを使用すると、Facebookはいくつかのテクノロジーを使用して、次のような多数のリクエストをサポートします。

  1. Memcache-データとオブジェクトをRAMにキャッシュして読み取り時間を短縮することにより、動的なデータベース駆動型Webサイト(Facebookなど)を高速化するために使用されるメモリキャッシュシステムです。MemcacheはFacebookの主要なキャッシング形式であり、データベースの負荷を軽減するのに役立ちます。キャッシングシステムがあると、Facebookはデータを呼び出すのと同じくらい高速になります。

  2. Thrift(プロトコル) -スケーラブルな言語間サービス開発のための軽量のリモートプロシージャコールフレームワークです。Thriftは、C ++、PHP、Python、Perl、Java、Ruby、Erlangなどをサポートしています。

  3. Cassandra(データベース) -これは、多数のサーバーに分散された大量のデータを処理するように設計されたデータベース管理システムです。

  4. HipHop for PHP -PHPスクリプトコードのソースコードトランスフォーマーであり、サーバーリソースを節約するために作成されました。HipHopは、PHPソースコードを最適化されたC ++に変換します。これを実行した後、g ++を使用してマシンコードにコンパイルします。

さらに詳しく説明すると、この質問への回答は長くなります。以下の投稿からさらに理解できます。

  1. Facebookはどのように機能しますか?
  2. データ管理、Facebookスタイル
  3. Facebookデータベース設計?
  4. Facebookウォールのデータベース構造
  5. Facebookの「いいね」データ構造

7

「このような大量のトラフィックを処理するサイトについて知ることは、建築家などが新しいサイトを設計する際に特定のことを覚えておくための多くの指針を提供します。」

成功した大規模なソフトウェアシステムの設計から学ぶことができるのと同じように、おそらくFacebookの設計から多くを学ぶことができると思います。ただし、新しいシステムを設計するときは、Facebookの現在の設計を覚えておくべきではないようです。

Facebookが処理しなければならないトラフィックを処理できるようにしたいのはなぜですか?プログラマーがどんなに才能があっても、必要はないでしょう。Facebook自体は、そのような大規模なスケーラビリティのために最初から設計されたわけではありません。それはおそらくそれから学ぶ最も重要な教訓です。

重要なソフトウェアシステムについて学習したい場合は、SharpDevelop IDEの開発に関する「C#アプリケーションの分析」という本をお勧めします。絶版ですが、オンラインで無料入手できます。この本は、実際のアプリケーションを垣間見ることができ、プログラマーに役立つIDEに関する洞察を提供します。


1
ええ、おそらくそれほど多くの人々はそのような重い交通に対処する必要はありません。ただし、スケーラビリティと、Facebookなどの優れた企業がこのような大量のトラフィックに対処する方法を理解することは常に良いことです。:)から学ぶことができるいくつかの優れた設計上のメリットがあるかもしれません
1兆

@nanshi:学ぶことは有益だと思います。私のポイントは、あなたが何のために設計しているのかを覚えておくべきだということです。1日目からスケーラビリティーを設計すると、プログラムの動作を変更することが難しくなります。ほとんどの場合、単純さがより重要です。さらに、Facebookは多くの人々によって管理されています。それらの人々のそれぞれは、システムの一部の専門家でなければなりません。
ヨルゲンFogh

あなたの言ってる事がわかります。同意する:)
兆1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.