Facebookのアーキテクチャ、それらが取り組む課題と方法についての記事/情報を探し求めてきました。使用するものと使用する理由。彼らはどのようにスケーリングし、彼らが何をするかなどの設計上の決定は何ですか。主な基盤は学ぶことです。このような大量のトラフィックを処理するサイトを知ることは、建築家などが新しいサイトを設計する際に特定の事項に留意するための多くの指針となります。私が見つけたものを共有しています。
さらに2つのリンクがありますが、このサイトの制限により投稿できません。また、誰かがより良いものを持っている場合は共有してください(Facebookのみに関連する必要はありません)。
PS -この研究を共有する良い場所を見つけることができなかったので、この取り組み。これが誰かを助けることを願っています。
Facebookには多くの変更が加えられていますが、もともと効率的な設計にはなっていません。それは仕事をするために設計されました。コードがどのように見えるかはまったくわかりませんが、おそらくセキュリティと著作権上の理由からそれについての情報はあまりありませんが、APIを見てください。それがどのくらいの頻度で変化し、どれだけ適切に、もはや、またはまったく機能しないかを見てください。
彼らの最大のエースはヒップホップだと思います。 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 ISは良いIDEAであり、成長および拡張する必要がありますが、現在の状態では、新しいPHPアプリを構築している多くの人にとってはあまり役に立ちません。
Resin/Quercusのようなものを経由したPHPからJavaへもあります。繰り返しますが、すべてをサポートしているわけではありません...
もう1つ注意すべき点は、非標準のPHPモジュールを使用すると、そのコードをC++またはJavaに変換できないことです。ただし... PHPモジュールを見てみましょう。これらはC++でコンパイルされます。したがって、(XMLの解析などの)ことを行うPHPモジュールを構築できる場合、基本的に(ある程度の相互作用を除いて)同じ速度で作業しています。もちろん、すべての可能なニーズとアプリ全体に対してPHPモジュールを作成することはできません。再コンパイルする必要があり、コーディングなどがはるかに難しいからです。
ただし...速度の問題に役立つ便利なPHPモジュールがいくつかあります。結局のところ、「クラウド」と呼ばれるこの素晴らしいものがあり、それを使用してアプリケーション(PHPを含む)をスケーリングできるので、それはもはや問題ではありません。ハードウェアはどんどん安くなっています。アマゾンは、とにかくその価格を下げました。
だから、あなたがPHPアプリを1日スケールする必要があるという考えに沿ってコーディングしている限り...その後、私はあなたが大丈夫だと思うし、Facebookを見るかどうかさえ本当にわからないそして、彼らがやったことは、彼らがそれをしたとき、それは完全に異なる世界であり、今、そのインフラストラクチャを維持し、それを維持しようとしているためです...まあ、あなたはHipHopのようなものを得る。
さて、HipHopはどのようにあなたを助けてくれるのでしょうか?しません。できません。新しく始めたときは、PHP 5.3を使用できます。 PHP 5.3フレームワークとPHP 5.3がSPLライブラリとともにテーブルにもたらすすべての新しい利点を検討することを強くお勧めします。また、データベースについても検討してください。データベースからコンテンツを提供する可能性が最も高いので、MongoDBおよびスキーマレスでドキュメント指向のその他のタイプのデータベースを確認してください。最も「一般的な」タイプのWebサイト/アプリでは、はるかに高速で優れています。
FoursquareやSmugmugのような新しい会社や、新しいテクノロジーを利用している他の会社と、それをどのように使用しているのかを見てください。 Facebookと同じくらい成功しているので、私は正直なところ、効率的なWebサイト/アプリを構築するための「方法」について彼らを見ていません。私は彼らがそこで働いている非常に(非常に)才能のある人たちが(彼らの)問題を創造的に解決していないと言っているのではありません... Facebookは一般的に素晴らしいアイデアではなく、そうではないとも言っていません成功していて、そこからアイデアを得るべきではないということです。..ソースコード全体を見ることができれば、おそらくそれから利益を得ることはないでしょう。
Facebookは LAMP構造 を使用しています。 Facebookのバックエンドサービスは、C++、Java、Python、Erlangなどのさまざまなプログラミング言語で記述されており、要件に応じて使用されます。 LAMPでは、Facebookはいくつかのテクノロジーを使用して、次のような多数のリクエストをサポートします。
Memcache -読み取り時間を短縮するためにデータとオブジェクトをRAMにキャッシュすることにより、動的なデータベース駆動型Webサイト(Facebookなど)を高速化するために使用されるメモリキャッシュシステムです。 MemcacheはFacebookのキャッシュの主要な形式であり、データベースの負荷を軽減するのに役立ちます。キャッシュシステムを使用すると、Facebookがデータをリコールするのと同じくらい高速になります。
Thrift(プロトコル) -スケーラブルな言語間サービス開発のための軽量のリモートプロシージャコールフレームワークです。 Thriftは、C++、PHP、Python、Perl、Java、Ruby、Erlangなどをサポートしています。
Cassandra(データベース) -これは、多数のサーバーに分散した大量のデータを処理するように設計されたデータベース管理システムです。
PHPのHipHop -PHPスクリプトコードのソースコードトランスフォーマーであり、サーバーリソースを節約するために作成されました。 HipHopはPHPソースコードを最適化されたC++に変換します。これを実行した後、g ++を使用してマシンコードにコンパイルします。
さらに詳しく説明すると、この質問への回答が長くなります。次の投稿からさらに理解できます。
「このような大量のトラフィックを処理するサイトを知ることは、建築家などが新しいサイトを設計する際に特定のものに留意するための多くの指針となります」
成功した大規模なソフトウェアシステムの設計から学べるように、おそらくFacebookの設計から多くを学ぶことができると思います。ただし、新しいシステムを設計するときは、Facebookの現在の設計を念頭に置いてnotする必要があるように思えます。
Facebookが処理しなければならないトラフィックを処理できるようにしたいのはなぜですか?プログラマーがどんなに才能があっても、そうする必要は決してないだろうということです。 Facebook自体は、このような大規模なスケーラビリティを実現するために最初から設計されたものではありません。これはおそらく、Facebookから学ぶための最も重要な教訓でしょう。
自明ではないソフトウェアシステムについて学びたい場合は、SharpDevelop IDEの開発に関する書籍「C#アプリケーションの解剖」をお勧めします。絶版ですが、 オンラインで無料で利用可能 です。この本は、実際のアプリケーションを垣間見ることができ、プログラマーに役立つIDEについての洞察を提供します。