molily: Facebook Nachrichten-System

Beitrag lesen

Hallo,

Facebook arbeitet meines Wissens auch stark mit MySQL. Du sprichst jedoch anscheinend vom »News Feed«, in dem alle Statusmeldungen von Profilen vorkommen, die man abonniert hat. Der arbeitet grundsätzlich anders als ein einfaches Nachrichtensystem. Den Zusammenzustellen bedeutet, verschiedene Daten zu aggregieren. Bei Facebook erzeugt eine Statusmeldung keine Nachrichten an alle potenziellen Empfänger, das würde nicht skalieren. Wenn ein Profil mit 31,5 Millionen Followern eine Statusmeldung absetzt, werden nicht 31,5 Millionen Nachrichten erzeugt.

Zunächst einmal gibt es Statusmeldungen. Die können von verschiedenen Typen sein und an denen können verschiedene weitere Daten hängen, z.B. Bilder. Beim Anlegen dieser passiert natürlich schon viel und dabei fallen viele Sonderdaten an (z.B. Metadaten über eine URL). Statusmeldungen können auch Kommentare haben. Diese Statusmeldungen und Kommentare samt anhängender Daten können meiner Vermutung nach recht klassisch in SQL-Datenbanken gespeichert werden bzw. verteilten Datenbanken wie Cassandra. Hinzu kommen verteilte Dateisysteme, um Bilder, Videos usw. in der Cloud zu speichern und weltweit schnell verfügbar zu machen.

Interessant wird es, wenn die relevanten Nachrichten zusammengesucht werden. Dazu bedarf es einer Graph-Datenbank, die die Beziehungen zwischen Profilen speichert und sehr schnell ausgeben kann, welche Quellen für Statusmeldungen überhaupt infrage kommen. Jeder »Like« und jede »Freundschaft« ist dort vermerkt. Auch dafür gibt es extra Datenbanken wie FlockDB. Man kann so etwas natürlich auch mit – nicht dafür spezialisierten – SQL-Datenbanken lösen.

Hat man alle relevanten Quellen, kann man deren Nachrichten aggregieren, filtern, zusammensetzen und sortieren. Dabei passiert natürlich auch viel Magie, es gibt sicher noch weitere spezialisierte Datenbanken und massig Caches, die hierbei ins Spiel kommen.

Ein kleineres Social Network (> 100000 Nutzer), das wir mitentwickelt haben, arbeitet weitesgehend mit SQL bei der Zusammenstellung der Newsfeeds. Statusmeldungen und sonstige Aktionen sind, wenn ich mich richtig erinnere, in klassischen Tabellen abgespeichert. Bei der Zusammenstellung wird von der Freundesliste ausgegangen. Das ganze wird schnell durch massive SQL-Optimierung und Caches. Es existiert daneben auch ein klassisches Messaging-System, das definierte Absender und Empfänger hat.

Mathias