Inhalt Vorwort.............................................................. IX 1 Einführung........................................................ 1 Grundlagen....................................................... 1 Kritik............................................................ 2 Soziales Netz...................................................... 4 Warum Facebook genutzt wird........................................ 7 2 Die Facebook- Plattform............................................ 13 Architektur der Facebook-Plattform................................... 13 Open Source...................................................... 15 3 Integrationspunkte................................................ 19 Interne Integrationspunkte.......................................... 21 Externe Integrationspunkte.......................................... 34 Zusammenfassung................................................. 51 4 Entwickeln mit Facebook............................................ 52 Anwendungen.................................................... 53 Voraussetzungen.................................................. 55 Anwendung anlegen................................................ 56 Anwendungseinstellungen........................................... 57 Hallo Welt....................................................... 65 Software Development Kits.......................................... 67 Schnittstellen..................................................... 72 Entwicklungswerkzeuge............................................. 77 Erfolgsfaktoren.................................................... 80 Zusammenfassung................................................. 87 V
5 Anwendungsbeispiele.............................................. 88 Welcome-Page.................................................... 88 MP3-Player....................................................... 97 Facebook-Karaoke................................................ 104 Facebook-Galerie................................................. 114 Hosting......................................................... 120 Zusammenfassung................................................ 123 6 Graph API....................................................... 124 Abfragen........................................................ 124 Erstellen........................................................ 134 Löschen von Objekten............................................. 137 Autorisierung.................................................... 137 Echtzeit-Updates................................................. 147 Objekte......................................................... 152 7 Open Graph Protocol.............................................. 226 Allgemein....................................................... 227 Objekttypen..................................................... 228 Ortsangaben..................................................... 228 Kontaktinformationen............................................. 229 8 REST-API........................................................ 230 Veraltete Methoden............................................... 230 batch.run....................................................... 232 Anmeldung und Sicherheit.......................................... 233 Anwendungen................................................... 240 Dashboard...................................................... 256 Benutzer........................................................ 273 Freunde........................................................ 282 Gruppen........................................................ 286 Facebook-Pages.................................................. 289 Stream......................................................... 291 Nachrichten..................................................... 302 Veranstaltungen.................................................. 311 Kommentare..................................................... 320 Fotos und Videos................................................. 324 Notizen......................................................... 337 VI Inhalt
Links.......................................................... 340 FBML.......................................................... 345 FQL.......................................................... 346 9 FQL............................................................ 350 Einführung...................................................... 350 Allgemeine Angaben.............................................. 354 Nachrichten..................................................... 359 Anwendungen................................................... 364 Der Stream...................................................... 367 Benutzer........................................................ 378 Freunde........................................................ 389 Seiten.......................................................... 392 Veranstaltungen.................................................. 396 Foto und Video.................................................. 399 Statistiken....................................................... 405 10 XFBML......................................................... 416 fb:activity....................................................... 416 fb:live-stream.................................................... 418 fb:recommendations.............................................. 418 fb:like.......................................................... 420 fb:like-box...................................................... 423 fb:comments.................................................... 424 fb:facepile....................................................... 425 fb:bookmark..................................................... 426 fb:add-profile-tab*................................................ 427 fb:login......................................................... 428 fb:login-button................................................... 428 fb:name........................................................ 429 fb:profile-pic..................................................... 431 fb:share-button................................................... 432 Index............................................................... 433 Inhalt VII
KAPITEL 2 Die Facebook- Plattform In diesem Kapitel werden Sie einiges über den Aufbau der Facebook-Plattform erfahren. Lesen Sie, welche Technologien zum Einsatz kommen und welche Besonderheiten es in Bezug auf die Entwicklung von Facebook selbst gibt. Architektur der Facebook-Plattform Nach Aussagen seiner Betreiber ist Facebook die PHP-basierte Website mit dem zweitgrößten Trafficaufkommen der Welt. In den letzten zwei Jahren hat sich das Trafficaufkommen mehr als verdoppelt, und somit proportional auch die Last auf die Infrastruktur. Facebook hat derzeit nach eigenen Angaben Zehntausende von Webservern, die jeweils ein Data-Center an der Ostküste und der Westküste der Vereinigten Staaten füllen. Momentan baut Facebook ein eigenes Data-Center in Prineville, Oregon, das Anfang 2011 fertiggestellt sein soll. Der technische Aufbau der Facebook-Infrastruktur ist relativ gewöhnlich. Facebook verwendet einen herkömmlichen LAMP-Stack, also Linux, Apache, MySQL und PHP. Load-Balancer weisen einzelne Anfragen einem Webserver zu. Die Anfragen werden von vorkompilierten PHP-Skripten verarbeitet. Diese greifen auf die MySQL- Instanzen zu, wobei diese Anfragen über Memcache gecached werden. Für spezielle Anwendungen innerhalb von Facebook kommen auch andere Technologien zum Einsatz. Zum Beispiel wird für die Inbox-Suche Cassandra verwendet, dem Facebook-Chat liegt eine in Erlang programmierte Anwendung zugrunde und für den Betrieb der Infrastruktur kommen weitere Technologien zum Einsatz. Die Infrastruktur von Facebook umfasst Schätzungen zufolge mehr als 60.000 Server. Bei einer derartigen Anzahl von Servern fallen regelmäßig und relativ oft Festplatten, Speicher, Mainboards und CPUs aus. Das Operations-Team von Facebook hat alle Hände voll zu tun und ist stets damit beschäftigt, die Plattform am Leben zu erhalten. 13
Abbildung 2-1: Vereinfachter technischer Aufbau Aktuelle Statusmeldungen zur Facebook-Plattform lassen sich unter der eigens dafür eingerichteten Webseite http://developers.facebook.com/live_status nachverfolgen. Hier erfährt man als Erstes, wenn etwas nicht stimmt. Zum Beispiel kann es vorkommen, dass bestimmte API-Funktionen nicht zur Verfügung stehen oder eine schlechte Reponse-Zeit haben. Abbildung 2-2: Livestatus der Facebook-Plattform Interessant ist auch der Innovations- und Entwicklungszyklus von Facebook. Anstatt den herkömmlichen Prozess vom Entwickler über die Qualitätssicherung zur Operationseinheit zu gehen, entwickelt, testet und deployt ein Facebook-Entwickler seine Arbeit selbst. Die Entwickler wissen meistens am besten, worauf es ankommt, und können Fehler wesentlich schneller beheben. Facebook setzt auf kleine Entwicklungsteams, die mit 14 Kapitel 2: Die Facebook- Plattform
einem technischen Mitarbeiter der Firma einem sogenannten»operations Guy«zusammenarbeiten, der die Schnittstelle zur Operationseinheit bildet; das ermöglicht direkten Informationsaustausch, und die entsprechenden Mitarbeiter helfen dabei, Architekturentscheidungen zu treffen. Alles in der technischen Umgebung von Facebook läuft auf dem Betriebssystem Linux. (Hier und da sind genaugenommen ein paar Solaris-Kisten in Betrieb, aber alles andere basiert auf Linux.) Tom Cook, Systems Engineer bei Facebook, erklärte bei der von O Reilly ausgerichteten Konferenz Velocity 2010, dass eine Variante von CentOS 5 mit einem angepassten 2.6er-Kernel eingesetzt wird. Für das Konfigurationsmanagement setzt man auf die CF-Engine und für das Monitoring kommen neben selbstgeschriebenen Tools ODS, Ganglia und Nagios zum Einsatz. Open Source Beim Betrieb der Facebook-Platform kommt vorwiegend Open Source-Software zum Einsatz, wobei das Facebook-Team die jeweilige Software selbst erweitert und so der Community etwas zurückgibt. Facebook selbst hat auch einige seiner Eigenentwicklungen als Open Source bereitgestellt. Im Folgenden geht es um ein paar der von Facebook eingesetzten Technologien, die für Sie vielleicht von Interesse sein könnten. HipHop for PHP Dabei handelt es sich um einen Quellcodewandler, der PHP-Code in nativen C++-Code überführt und mit g++ kompiliert wird. Das ermöglicht es dem Entwicklungsteam von Facebook, weiterhin in PHP zu programmieren und trotzdem eine auf Leistung optimierte Anwendung zu entwickeln. HipHop für PHP wurde von nur drei Ingenieuren entwickelt und steht als Open Source-Download zur Verfügung. Es hat über zwei Jahre gedauert, HipHop in den produktiven Betrieb zu überführen und es bedient heute 100% des Traffics von Facebook. Die Leistungsfähigkeit ist enorm: Mit HipHop kann die Leistung bis zu 50% angehoben werden. Memcache Facebook hat einen ziemlich großen Footprint, was Memcache angeht. Memcache ist der Caching-Layer zwischen der Datenbank und den Webservern. Zur Orientierung: Derzeit hält die Facebook-Anwendung über 300 Terabyte ihrer Daten via Memcache im RAM- Speicher der laufenden Server. MySQL In MySQL werden die meisten Daten der Site endgültig gespeichert, wobei die meisten Interaktionen auf der Website mit Memcache erfolgen und immer seltener mit MySQL. Alternativ dazu setzt Facebook mehr und mehr auf die selbst entwickelte NoSQL-Datenbank Cassandra (s.u.). Open Source 15
Services Services sind im Zusammenhang mit dem technischen Aufbau der Facebook-Plattform dedizierte Systeme, die Daten für die Auslieferung aus verschiedenen Quellen aggregieren. Beispiele für diese Services sind News Feed, Search, Chat, Ads, Media usw. Cassandra Cassandra gehört zu den immer beliebter werdenden NoSQL-Datenbanken. Sie wurde ursprünglich von den Facebook-Ingenieuren Avinash Lakshman (er ist einer der Autoren von Amazon Dynamo) und Prashant Malik für die Inbox-Suche entwickelt. 2008 wurde Cassandra als Open Source-Projekt auf Google Code veröffentlicht. Zu diesem Zeitpunkt wurden das System innerhalb eines Clusters mit über 600 CPU-Kernen und mehr als 120 Terabyte Daten eingesetzt. Für immer mehr Facebook-interne Anwendungen wird Cassandra als Storage-Engine eingesetzt. Bekannte Nutzer von Cassandra sind unter anderem Digg, Twitter, Rackspace und Cisco Webex. Thrift Bei Thrift handelt es sich um ein Remote Procedure Call Framework, das von Facebook zu dem Zweck entwickelt wurde, skalierbare, programmiersprachenübergreifende Serviceentwicklung zu ermöglichen. Mit Thrift definiert man Datentypen und Serviceschnittstellen in einer sehr simplen Definitionsdatei. Mithilfe dieser Datei generiert Thrift Code, mit dem man RPC-Clients und -Server entwickeln kann, die sprachenübergreifend kommunizieren können. Derzeit ist Thrift für die Sprachen C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk und OCaml verfügbar. Apache Hive Hive ist eine auf Apache Hadoop basierende Warehouse-Infrastruktursoftware, die einfache Werkzeuge zur Verfügung stellt, um Daten zu summieren und Analysen und Liveabfragen über große Datenmengen durchzuführen. Seit 2008 wird Hive bei Facebook für die Datenanalyse eingesetzt. Hive stellt eine SQL-ähnliche Sprache zur Abfrage zur Verfügung. Für Abfragen, die mit herkömmlichen Features der Sprache nicht verarbeitet werden können, stellt Hive darüber hinaus ein Map/Reduce-Framework zur Verfügung. Derzeit geht es dabei um eine Installation mit über 4.800 CPU-Kernen und mehr als 8 Petabyte Daten, in der täglich mehr als 8.000 Jobs verarbeitet werden. Flashcache Ursprünglich wurde das Linux-Kernelmodul Flashcache von Facebook als Blockcache für InnoDB/MySQL entwickelt. Flashcache kann jedoch überall eingesetzt werden und ist nicht ausschließlich für InnoDB/MySQL sinnvoll. Bei InnoDB kommt es zu Latenzen während des Lesens, wenn die Arbeitsdaten nicht in den Buffer-Pool passen; auch beim 16 Kapitel 2: Die Facebook- Plattform
Schreiben treten gewöhnlich Latenzen auf, da die Daten auf die Festplatte geschrieben werden. Mit Flashcache ist es möglich, einen Blockcache hierfür auf schnellere Medien wie zum Beispiel SSDs zu legen. Dabei werden dann die Daten auf den SSDs zwischengespeichert und können so vom System schneller abgerufen werden. So lässt sich die Performance von InnoDB/MySQL erheblich steigern. Jedoch kann diese Methode auch für alle anderen Anwendungen mit ähnlicher Problemstellung eingesetzt werden. Flashcache ist Open Source und steht unter GPL-2-Lizenz zum Download zur Verfügung. Tornado Tornado wurde von Facebook 2009 unter der Apache-Lizenz 2.0 veröffentlicht. Es ist ein Non-blocking Webserver, der auf viele gleichzeitige Verbindungen spezialisiert ist. Tornado wurde ursprünglich von FriendFeed entwickelt, das 2009 von Facebook gekauft wurde. Tornado eignet sich vor allem für Echtzeitwebdienste. Das Framework wurde in Python geschrieben und ähnelt dem Django-Framework, dessen Templates sich auch in Tornado verwenden lassen. FriendFeed verwendet Tornado hinter einem nginx-server, der als Load-Balancer fungiert. Facebook setzt diesen Webserver derzeit nicht ein, da ein Großteil der Facebook-Plattform in PHP geschrieben ist. Scribe Scribe ist ein Server, der in der Lage ist, Logging-Daten von vielen Servern in Echtzeit zu aggregieren. Facebook hat Scribe entwickelt, um bei den vielen verschiedenen eingesetzten Technologien einheitlich Logging-Daten zu sammeln bzw. zu aggregieren. 2008 wurde Scribe von Facebook zu Open Source gemacht. Es ist ohne clientseitige Anpassung skalierbar. Derzeit unterstützt Scribe mehr als 100 Anwendungen und verträgt mehrere Milliarden Nachrichten pro Tag. Wer viele Logging-Daten sammeln muss, findet in Scribe einen guten Freund und Helfer. Der Client loggt die Daten mit einer Thrift- Schnittstelle. Gerade bei verteilten Systemen entfaltet Thrift seine Stärken und ist für viele Operations-Teams unabdingbar. Varnish Varnish ist ein HTTP-Beschleuniger bzw. ein HTTP-Cache. Es wurde für dynamische Websites entwickelt, die sehr viele Inhalte haben. Dabei cacht Varnish die generierte Website im Speicher. Bei dynamischen Websites sind oft mehrere Schritte via Frontend, Middleware und Backend sowie einige Datenbankabfragen notwendig, um eine Seite zu erzeugen. Varnish speichert diese zwischen und generiert nur neue, wenn sich die Seite geändert hat. Facebook setzt diesen Beschleuniger für Medien und Ähnliches ein. Ursprünglich wurde das Projekt von der Onlineabteilung der norwegischen Boulevardzeitung Verdens Gang initiiert. Varnish ist in C entwickelt, Open Source, steht unter der BSD-Lizenz und wurde 2006 mit der Version 1.0 veröffentlicht. Open Source 17
CFEngine Die Software CFEngine ist ein regelbasiertes Konfigurationsmanagement-System, das für die automatisierte Konfiguration und Wartung von Servern eingesetzt wird. Facebook verwendet CFEngine für die Wartung von Host-Konfigurationen und für gewöhnliche Wartungsarbeiten der Produktionsumgebung. CFEngine steht als Open Source und Commercial-Variante zur Verfügung und wird unter anderem vom US-Militär, IBM, Nokia, ebay und der Yale-Universität verwendet. 18 Kapitel 2: Die Facebook- Plattform