Ich habe nach Artikeln / Informationen über die Architektur bei Facebook gesucht, über die Herausforderungen und die Art und Weise, wie sie diese angehen. Was sie benutzen und warum sie benutzen. Wie skalieren sie und was sind die Entwurfsentscheidungen für das, was sie tun usw. Die Hauptgrundlage ist das Lernen. Das Wissen über Websites, die mit solch massivem Verkehr umgehen, gibt Architekten usw. viele Hinweise, um bestimmte Dinge beim Entwerfen neuer Websites zu berücksichtigen. Ich teile, was ich gefunden habe.
- Facebook Science & Social Graph (Video)
- Bei Facebook skalieren
- Facebook Chat Architektur
- Facebook Blog
- Facebook Cassandra Architektur und Design
- Facebook Engineering Notes
- Quora - Facebook-Architektur
- Facebook für 600 Millionen Nutzer
- Hadoop & seine Verwendung bei Facebook
- Erlang bei Facebook: Chat-Architektur
- Facebook Performance Caching
- Facebook Connect-Architektur
Ich habe 2 weitere Links, kann aber aufgrund von Einschränkungen auf dieser Website nicht posten. Bitte teilen Sie auch mit, wenn jemand etwas Besseres hat (muss nicht nur mit Facebook verwandt sein).
PS: Ich konnte keine guten Orte finden, um diese Forschung zu teilen, daher diese Initiative. Hoffe das hilft jemandem.
quelle
Antworten:
Nun, Facebook hat VIELE Änderungen erfahren und war ursprünglich nicht darauf ausgelegt, effizient zu sein. Es wurde entwickelt, um seinen Job zu machen. Ich habe absolut keine Ahnung, wie der Code aussieht, und Sie werden wahrscheinlich nicht viele Informationen darüber finden (aus offensichtlichen Sicherheits- und Urheberrechtsgründen), aber schauen Sie sich einfach die API an. Sehen Sie sich an, wie oft es sich ändert und wie viel davon nicht mehr richtig oder überhaupt nicht mehr funktioniert.
Ich denke, das größte Ass im Ärmel ist der HipHop. http://developers.facebook.com/blog/post/358 Sie können HipHop selbst verwenden: https://github.com/facebook/hiphop-php/wiki
Aber wenn Sie mich fragen, ist es eine sehr ehrgeizige und wahrscheinlich zeitraubende Aufgabe. Hiphop unterstützt nur so viel, dass es nicht einfach alles in C ++ konvertieren kann. Was sagt uns das? Nun, es sagt uns, dass Facebook die PHP-Sprache NICHT voll ausnutzt. Es wird nicht die neueste Version 5.3 verwendet und ich bin bereit zu wetten, dass es noch eine Menge gibt, die PHP 4-kompatibel ist. Andernfalls könnten sie HipHop nicht verwenden. HipHop ist eine gute Idee und muss wachsen und expandieren, aber im aktuellen Zustand ist es für so viele Leute, die NEUE PHP-Apps erstellen, nicht wirklich nützlich.
Es gibt auch PHP zu JAVA über Dinge wie Resin / Quercus. Auch hier unterstützt es nicht alles ...
Beachten Sie außerdem, dass Sie diesen Code auch nicht in C ++ oder Java konvertieren können, wenn Sie ein nicht standardmäßiges PHP-Modul verwenden. Aber ... Schauen wir uns die PHP-Module an. Sie sind in C ++ kompiliert. Wenn Sie also PHP-Module erstellen können, die Dinge erledigen (wie XML analysieren usw.), arbeiten Sie im Grunde (abzüglich einiger Interaktionen) mit derselben Geschwindigkeit. Natürlich können Sie nicht einfach ein PHP-Modul für jeden möglichen Bedarf und Ihre gesamte App erstellen, da Sie neu kompilieren müssten und das Codieren usw. viel schwieriger wäre.
Es gibt jedoch einige praktische PHP-Module, die bei Geschwindigkeitsproblemen helfen können. Letztendlich haben wir dieses großartige Ding, das als "Cloud" bekannt ist, und damit können wir unsere Anwendungen (einschließlich PHP) skalieren, sodass es nicht mehr so wichtig ist. Hardware wird immer billiger. Amazon hat gerade seine Preise (wieder) gesenkt.
Solange Sie Ihre PHP-App mit der Idee codieren, dass sie eines Tages skaliert werden muss ... Dann denke ich, dass es Ihnen gut geht und ich bin mir nicht sicher, ob ich mir Facebook überhaupt ansehen würde und was sie wann gemacht haben Sie haben es geschafft, es war eine völlig andere Welt und jetzt versuchen sie, diese Infrastruktur aufrechtzuerhalten und zu warten ... Nun, Sie bekommen Dinge wie HipHop.
Wie wird HipHop Ihnen helfen? Das wird es nicht. Es kann nicht. Sie fangen neu an, Sie können PHP 5.3 verwenden. Ich würde wärmstens empfehlen, sich mit PHP 5.3-Frameworks und all den neuen Vorteilen zu befassen, die PHP 5.3 zusammen mit den SPL-Bibliotheken bietet, und auch an Ihre Datenbank zu denken. Sie stellen höchstwahrscheinlich Inhalte aus einer Datenbank bereit. Schauen Sie sich also MongoDB und andere Arten von Datenbanken an, die schemalos und dokumentenorientiert sind. Sie sind viel schneller und besser für die "häufigste" Art von Website / App.
Schauen Sie sich NEUE Unternehmen wie Foursquare und Smugmug sowie einige andere Unternehmen an, die NEUE Technologie einsetzen und wie sie diese einsetzen. So erfolgreich Facebook auch ist, ich würde sie ehrlich gesagt nicht als "Wie" betrachten, um eine effiziente Website / App zu erstellen. Ich sage nicht, dass sie keine sehr (sehr) talentierten Leute haben, die dort arbeiten und (ihre) Probleme kreativ lösen ... Ich sage auch nicht, dass Facebook im Allgemeinen keine großartige Idee ist und dass es keine ist erfolgreich und dass Sie keine Ideen daraus bekommen sollten ... Ich sage nur, wenn Sie den gesamten Quellcode anzeigen könnten, würden Sie wahrscheinlich nicht davon profitieren.
quelle
Facebook verwendet die LAMP-Struktur . Die Back-End-Dienste von Facebook sind in verschiedenen Programmiersprachen wie C ++, Java, Python und Erlang geschrieben und werden je nach Anforderung verwendet. Mit LAMP verwendet Facebook einige Technologien, um eine große Anzahl von Anfragen zu unterstützen, wie z
Memcache - Es handelt sich um ein Speicher-Caching-System, mit dem dynamische datenbankgesteuerte Websites (wie Facebook) beschleunigt werden, indem Daten und Objekte im RAM zwischengespeichert werden, um die Lesezeit zu verkürzen. Memcache ist die primäre Form des Caching bei Facebook und hilft, die Datenbanklast zu verringern. Mit einem Caching-System kann Facebook so schnell wie möglich Ihre Daten abrufen.
Thrift (Protokoll) - Es handelt sich um ein leichtes Framework für Remoteprozeduraufrufe für die skalierbare Entwicklung sprachübergreifender Dienste. Thrift unterstützt C ++, PHP, Python, Perl, Java, Ruby, Erlang und andere.
Cassandra (Datenbank) - Es handelt sich um ein Datenbankverwaltungssystem, das für die Verarbeitung großer Datenmengen ausgelegt ist, die auf viele Server verteilt sind.
HipHop für PHP - Es ist ein Quellcode-Transformator für PHP-Skriptcode und wurde erstellt, um Serverressourcen zu sparen. HipHop wandelt PHP-Quellcode in optimiertes C ++ um. Danach wird es mit g ++ zu Maschinencode kompiliert.
Wenn wir näher darauf eingehen, dauert die Beantwortung dieser Frage länger. Wir können mehr aus folgenden Beiträgen verstehen:
quelle
Ich denke, Sie können wahrscheinlich viel vom Design von Facebook lernen, genauso wie Sie vom Design eines erfolgreichen großen Softwaresystems. Allerdings scheint es mir , dass Sie sollten nicht das aktuelle Design von Facebook im Auge behalten , wenn neue Systeme zu entwerfen.
Warum möchten Sie in der Lage sein, den Verkehr zu bewältigen, den Facebook verarbeiten muss? Die Chancen stehen gut, dass Sie es niemals müssen, egal wie talentiert Sie als Programmierer sind. Facebook selbst war nicht von Anfang an auf eine derart massive Skalierbarkeit ausgelegt, was vielleicht die wichtigste Lektion ist, um daraus zu lernen.
Wenn Sie mehr über ein nicht triviales Softwaresystem erfahren möchten, kann ich das Buch "Zerlegen einer C # -Anwendung" über die Entwicklung der SharpDevelop-IDE empfehlen. Es ist vergriffen, aber kostenlos online verfügbar . Das Buch gibt Ihnen einen Einblick in eine reale Anwendung und bietet Einblicke in IDEs, die für einen Programmierer nützlich sind.
quelle