Facebook-Architektur [geschlossen]


169

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.

  1. Facebook Science & Social Graph (Video)
  2. Bei Facebook skalieren
  3. Facebook Chat Architektur
  4. Facebook Blog
  5. Facebook Cassandra Architektur und Design
  6. Facebook Engineering Notes
  7. Quora - Facebook-Architektur
  8. Facebook für 600 Millionen Nutzer
  9. Hadoop & seine Verwendung bei Facebook
  10. Erlang bei Facebook: Chat-Architektur
  11. Facebook Performance Caching
  12. 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.



2
Auch highscalability.com scheint ein großartiger Ort zu sein, um mehr über Architekturen für viele beliebte Websites zu erfahren. Keine Ahnung, wie viel davon wahr ist und wie viel spekulativ, aber es ist da draußen und nur etwas zum
Knabbern

1
Der Facebook-Engineering-Blog bietet gelegentlich wichtige Einblicke in die Architektur und die Skalierungsprobleme.
Colin Pickard

Da dies technisch gesehen keine echte Frage ist, sollten Sie die Informationen in das FB-Tag-Wiki verschieben , um die Informationen dort zu speichern , falls diese Frage gelöscht wird. Vielen Dank.
Gordon

@ Gordon Wie füge ich ein FB Wiki Tag hinzu? Ist das 'Facebook'-Tag nicht schon da? Das reicht nicht
Srikar Appalaraju

Antworten:


33

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.


1
stimmte den meisten Ihrer Aussagen zu. Diese Links dienen nur der Neugier. Manchmal schaut man sich ein Stück Technologie an und sagt "Hey! Das ist cool" ...
Srikar Appalaraju

Zufällige Wiederholung meiner Antwort hier zwei Dinge. # 1, ich glaube, C und nicht C ++ sind meine technischen Probleme ... Aber was noch wichtiger ist: # 2, Phalcon ist ein neueres PHP-Framework, das aus Geschwindigkeitsgründen viel in PHP-Erweiterungen konvertiert. Obwohl ein Großteil Ihres eigenen Codes natürlich nicht in C ausgeführt wird und jede andere Bibliothek, die Sie verwenden, wahrscheinlich auch nicht ausgeführt wird. Es ist jedoch eine clevere Idee, ähnlich wie bei HipHop, zusätzliche Leistung zu erzielen.
Tom

... und jetzt geht es wieder los mit dem Ass im Ärmel. Rückblickend Jahre später haben wir diese Hack-Sprache (geboren aus dem HipHop-Zeug mit seiner eigenen IDE nicht weniger). Ist es etwas Besseres geworden? Wir werden sehen. Kann es dir helfen? Vielleicht, aber jetzt sieht es so aus, als könnten auch Sie genau wie Facebook bauen. Es hat nur ungefähr 4 Jahre gedauert =) Obwohl ich persönlich nicht so schnell wäre, um die Kool-Hilfe zu trinken.
Tom

1
Wenn ich jetzt die Antwort betrachte, bin ich erstaunt, wie sich die Dinge in der Technologiewelt entwickeln. HipHop unterstützte nicht nur die neuesten Versionen von PHP, Facebook entwickelte auch HHVM, das noch schneller ist.
Gopi Krishna

Ja, ich bekomme manchmal Benachrichtigungen, die mich darauf zurückführen. Es ist wirklich großartig zu sehen, wie sich die Dinge verändert haben und wie sich HipHop zu HHVM entwickelt hat (und wahrscheinlich, wie Facebook sich unter dem Deckmantel neu erfindet - sehen Sie sich auch die erstaunlichen JS-Fortschritte an, die sie machen). Das macht für mich Sinn. Wenn Sie ein äußerst erfolgreiches Unternehmen mit viel Geld und Mitarbeitern haben ... Warum nicht irgendwann wieder in Forschung und Entwicklung investieren?
Tom

18

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

  1. 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.

  2. 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.

  3. Cassandra (Datenbank) - Es handelt sich um ein Datenbankverwaltungssystem, das für die Verarbeitung großer Datenmengen ausgelegt ist, die auf viele Server verteilt sind.

  4. 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:

  1. Wie funktioniert Facebook?
  2. Datenverwaltung im Facebook-Stil
  3. Facebook Datenbank Design?
  4. Datenbankstruktur der Facebook-Pinnwand
  5. Facebook "like" Datenstruktur

7

"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 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.


1
Ja, wahrscheinlich müssen nicht viele Menschen mit einem so starken Verkehr fertig werden. Aber es ist immer gut zu verstehen, wie skalierbar ein großartiges Unternehmen wie Facebook mit einem so starken Datenverkehr umgeht. Es kann einige gute Design-Vorteile geben, aus denen man lernen kann :)
Billionen

@nanshi: Ich stimme zu, dass es nützlich ist, daraus zu lernen. Mein Punkt ist, dass Sie bedenken sollten, wofür Sie entwerfen. Das Entwerfen für Skalierbarkeit ab dem ersten Tag macht es schwieriger, die Funktionsweise des Programms zu ändern. In den meisten Situationen ist Einfachheit wichtiger. Darüber hinaus wird Facebook von vielen Menschen gepflegt. Jede dieser Personen muss nur ein Experte für einen Teil des Systems sein.
Jørgen Fogh

ich weiß, worauf du hinauswillst. stimme zu :)
Billionen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.