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