Übersicht der bei Facebook eingesetzten Technologien und Systeme

Facebook ist mit rund 400 Millionen Benutzern die grösste Social Media Plattform der Welt. Um die ungeheure Flut an Daten verarbeiten zu können bedient sich Facebook verschiedenster Systeme um maximale Performance zu bekommen. Ich stelle euch heute die wichtigsten vor.

Zuerst ein paar Zahlen zum Datenaufkommen bei Facebook:

  • Facebook hat mehr als 570 Milliarden PageViews pro Monat
  • Facebook speichert mehr Fotos als alle anderen Foto Sites zusammen (inkl. Flickr).
  • Mehr als 3 Milliarden Fotos werden pro Monat hochgeladen
  • Facebook kann 1.2 Millionen Fotos pro Sekunde speichern
  • Auf Facebook werden jeden Monat rund 25 Milliarden Meldungen (Statusmeldungen, Kommentare…) verfasst
  • Facebook hat ungefähr 30 000 Server im Einsatz (diese Zahl ist eine Schätzung von letztem Jahr, heute dürften es einige mehr sein)

Facebook ist eigentlich immer noch eine LAMP Seite, welche aber kontinuierlich ausgebaut wurde. Die Seite basiert auf PHP welches aber durch einen eigenen Compiler auf den Servern direkt in nativen Code umgewandelt wird. Bei Facebook kommt Linux zum Einsatz welches vor allem im Bezug auf den Netzwerk Output optimiert wurde. Die Plattform basiert auf MYSQL welches aber durch verschiedene Systeme (siehe unten) ergänzt wird, so das die Webserver einen grossen Teil der Last direkt übernehmen ohne auf die Datenbank zurückgreifen zu müssen.

Eingesetzte Software bei Facebook:

Memcached

Memcached ist eine der spannendsten Technologien im Internet momentan. Die Technik wird von vielen sehr grossen Netzwerken und Webplattformen genutzt. Memcached speichert Daten als Cache im Memory und fungiert als Brücke zwischen dem Webserver und der MySQL Datenbank (da Datenbankzugriffe relativ langsam sind). Facebook hat Memcached kontinuierlich weiter entwickelt und setzt tausende von Cache Servern ein mit jeweils mehreren Terrybyte RAM.

HipHop for PHP

PHP ist als Script Sprache ist deutlich langsamer als nativer Code welcher direkt auf den Server ausgeführt wird. HipHop for PHP übersetzt PHP in C++ welches dann direkt und mit voller Geschwindigkeit auf den Webservern laufen kann. Dadurch kann die Geschwindigkeit der einzelnen Webserver massiv gesteigert werden.

HipHop wurde von einem kleinen Team (am Anfang waren nur 3 Leute beteiligt) bei Facebook selber entwickelt und ist seit rund 1.5 Jahren produktiv im Einsatz.

Haystack

Haystack ist Facebooks high performance Foto Storage. Eigentlich ist Haystack ein Objekt Speicher welcher auch anderes als Fotos speichern könnte. Dieser Storage hat unglaublich viel zu tun, sind doch rund 20 Milliarden Fotos im Speicher vorhanden, welche alle in 4 verschiedenen Auflösungen gespeichert werden. Alle Sekunde kommen 1.2 Millionen Fotos hinzu.

BigPipe

BigPipe ist ein System welches dynamisch Webseiten in einzelne Fragmente zerlegt um dadurch die Performance zu steigern. Die einzelnen Pagelets genannten Fragmente können dann parallel ausgeliefert werden, was den Performance Boots ausmacht. So wird zum Beispiel das Chat Fenster separat ausgeliefert und der Newsfeed und so weiter.

Cassandra

Cassandra ist ein Speichersystem ohne einen Single Point of Failure. Es ist eines der Vorzeige Produkte für die NoSQL Initiative. Cassandra liegt inzwischen als Open Source vor und wird von Facebook für ihr Inbox Suchsystem benutzt.
Cassandra wird von vielen grossen Sites benutzt, so zum Beispiel auch von Digg.

Scribe

Scribe ist ein flexibles Logging System welches Facebook für verschiedenste Zwecke benutzt. Es ist für grosse Systeme wie Facebook ausgelegt, und kann automatisch neue Logging Kategorien hinzufügen, wovon Facebook rege Gebrauch macht.

Hadoop and Hive

Hadoop ist ein Open Source System zur Analyse von sehr vielen Daten. Facebook braucht es für statistische Auswertungen seiner gigantischen Daten. Hive ist eine Facebook eigen Entwicklung um mit standard SQL Queries auf Hadoop zugreifen zu können, was den Gebrauch vor allem für nicht Programmierer einfacher gestalltet.
Beide Systeme sind inzwischen OPen Source und beim Apache Projekt angesiedelt.

Thrift

Bei Facebook kommen verschiedenste Programmiersprachen zum Einsatz. Das Front End ist in PHP geschrieben, Erlang wird für das Chat System benutzt, und Java sowie C++ kommen anderorts auch zum Einsatz. Thrift ist ein von Facebook entwickeltes Framework welches den einzelnen Sprachen ermöglicht miteinander zu kommunizieren. Dadurch ist es für Facbook viel einfacher die verschiedensten Sprachen zu managen und zu verbinden.
Thrift ist von Facebook als Open Source freigegeben und wird kontinuierlich um weitere Sprachen ergänzt.

Varnish

Varnish ist ein HTTP Accelerator welcher als Load Balancer und Caching Dienst fungiert. Durch den Einsatz kann die Performance des Front Ends massiv gesteigert werden. Facebook benutzt Varnish für die Auslieferung von Fotos und Profilfotos. Jeden Tag werden Milliarden von Requests abgearbeitet. Wie fast alle bei Facebook benutzte Software, ist Varnish Oopen Source.

Weitere Software welche Facbook hilft die Last zu verarbeiten:

Die bisher genannten Systeme sind nur ein Teil der bei Facebook zum Einsatz kommenden Produkte. Der Betrieb einer Seite von diesem Ausmass ist sehr komplex, daher hat Facebook noch die eine oder andere Möglichkeit zur Optimierung.

So wird zum Beispiel ein System Names Gatekeeper eingesetzt, welches es möglich macht verschiedenen Code für verschiedene User auszuliefern. Dadurch können Seiten Optimierungen an bestimmte User Gruppen verteilt werden bevor die ganze Seite geupdatet wird. Das vereinfacht das Testing neuer Komponenten.

Überwachung der Systeme

Facebook überwacht jede einzelne Komponente der Seite sehr genau. So wird auch der PHP Code ständig überwacht um Performance Problemen vorbeugen zu können. Das geschieht zum Beispiel mit dem Tool XHProof.

Abschaltung einzelner Funktionen

Sobald Facebook Performance Probleme feststellt, werden gezielt gewisse Funktionen der Seite deaktiviert. Das kann z.B. das Chat System oder aber auch der Photo Upload sein. Dadurch soll die Gesamtperformance der Seite sichergestellt und ein Totalabsturz verhindert werden.

Server

Ich bin nicht gross auf die Server von Facebook eingegangen. Diese spielen fpr die Performance natürlich ebenfalls eine grosse Rolle. Facebook basiert wir die meisten grossen Sites auf einem CDN um statische Daten schnell ausliefern zu können. Danaben betreibt Facebook riesige Serverfarmen, wie z.B. jene in Oregon.

Facebook und Open Source

Man kann einen Artikel über die Systeme bei Facebook nicht schreiben, ohne auf Facebooks „Liebe“ zu Open Source einzugehen. Facebook versucht wo immer möglich Open Source Software einzusetzen.

So werden hauptsächlich Open Source Produkte wie Linux, MySQL, Apache, Memcache und viele andere mehr, eingesetzt. Eigene Produkte wie Cassandra, HipHop und Thift and Scribe werden zu OPen Source gemacht.

Herausforderungen für Facebook:

Facebook wächst beinahe exponentiell und wird wohl gegen Ende Jahr eine halbe Milliarde User haben. Man rechnet mit rund 100 Millionen neuen Benutzern alle 6 Monate. Facebook beschäftigt ein eigenes „Wachstums Team“ welches dafür schaut, dass die Infrastruktur mit den wachsenden Benutzerzahlen zurecht kommt. Im Gegensatz zu Twitter, welches momentan mit massiven Performance Problemen zu kämpfen hat, scheint Facebook das starke Wachstum recht gut im Griff zu haben. Man reagiert jeweils schnell auf neue Herausforderungen, so wurde z.B. das Fotosystem von Facebook bereits mehrere male komplett neu geschrieben.

Die Daten in diesem Blog Post stammen grösstenteils vom Facebook Engineering Blog, und der Seite Pingdom, ergänzt mit Links zu Wikipedia.