# Google File System

Das Google File System (GFS oder GoogleFS) ist ein proprietäres verteiltes Dateisystem für Linux-basierte Systeme, das Google intern entwickelte, um große Datenmengen vor allem aus dem Index der Google-Suche und später auch aus Gmail zu speichern und zu verarbeiten. Das Google File System kennt zwei Arten von Komponenten: die Master- und die Chunkserver. Erstere halten lediglich Metainformationen über Dateien, während letztere die tatsächlichen Daten auf einem klassischen Linux-Dateisystem persistieren. Das Google File System unterteilt die Dateien dafür in Chunks, so dass eine Datei auf mehrere Server aufgeteilt werden kann. In der ersten Version war jeder Chunk 64 Megabyte groß, während die Größe später auf 1 MB aktualisiert wurde (Stand 2009). Das Google File System arbeitet eine Abstraktionsebene höher als typische Dateisysteme und kümmert sich lediglich um die Verteilung, unter Gewährleistung von Verfügbarkeit und Konsistenz der Daten. Es ist für einen hohen Datendurchsatz optimiert und kann hunderte von Terabytes verteilt auf tausende Festplatten auf tausenden Maschinen verwalten.

## Aufbau

Das Google File System ist an die notwendigen Anforderungen der Websuche angepasst, die eine enorme Menge an zu speichernden Daten generiert. GFS entstand aus einem früheren Versuch Googles, welcher den Namen „BigFiles“ trägt und von Larry Page sowie Sergey Brin während ihrer Forschungstätigkeit an der Stanford University entwickelt wurde.
Die Daten werden durchgehend in sehr großen, teilweise sogar mehrere Gigabyte großen Dateien gespeichert, welche nur in extrem seltenen Fällen gelöscht, überschrieben oder komprimiert werden; Daten werden üblicherweise angehängt oder ausgelesen. Das Dateisystem ist auch entworfen und optimiert worden, um auf Googles rechnenden Clustern laufen zu können, deren Netzknoten aus handelsüblichen PCs bestehen. Dies bedeutet allerdings auch, dass man die hohe Ausfallrate und den damit verbundenen Datenverlust individueller Netzknoten als Normalzustand ansehen muss. Das äußert sich auch darin, dass kein Unterschied zwischen normaler (Herunterfahren) und abnormaler Beendigung (Absturz) gemacht wird: Serverprozesse werden standardmäßig per Killbefehl beendet. Andere Designentscheidungen setzen auf hohe Datendurchsatzraten, auch wenn dies auf Kosten der Latenzzeit geht.
Ein GFS Cluster besteht aus einem Master und hunderten oder tausenden Chunkservern. Die Chunkserver speichern die Dateien, wobei jede Datei in 64 MB große Stücke („Chunks“) gespalten ist, ähnlich Clustern oder Sektoren in gebräuchlichen Dateisystemen.
Um Datenverlust zu verhindern, wird jede Datei beim GFS standardmäßig mindestens dreimal pro Cluster gespeichert. Bei Ausfall eines Chunkservers treten nur verschwindend geringe Verzögerungen auf, bis die Datei wieder ihre Standardanzahl an Replikas besitzt. Je nach Bedarf kann die Anzahl auch höher liegen, etwa bei ausführbaren Dateien. Jedem Chunk wird eine eindeutige, 64 Bit lange Kennzeichnung zugewiesen, logische Mappings der Dateien zu den einzelnen Chunks werden beibehalten.
Der Master speichert keine Chunks, sondern vielmehr deren Metadaten, wie etwa Dateinamen, Dateigrößen, ihren Speicherort sowie den ihrer Kopien, welche Prozesse gerade auf welchen Chunk zugreifen etc. Die Master erhalten jegliche Anfragen für eine Datei und liefern als Antwort die dazugehörigen Chunkserver und erteilen entsprechende Sperren an den Prozess. Ein Client darf allerdings für gewisse Zeit die Adresse der Chunkserver cachen. Fällt die Anzahl an verfügbaren Replikas unter die Normzahl, sind es auch die Master, die die Erstellung einer neuen Chunkkopie anstoßen. Die Metadaten werden aktuell gehalten, indem die Master regelmäßig Aktualisierungsanfragen an die Chunkserver senden („heart-beat messages“, auf Deutsch etwa: „Herzschlag-Nachrichten“).
Design und Implementierung des GFS sehen nur einen Master pro Cluster vor. Dies hat den Anschein, ein Fehler im System zu sein, der dessen Skalierbarkeit und Zuverlässigkeit begrenzt, da die maximale Größe und Uptime von der Leistungsfähigkeit und Uptime des Masters abhängt, da dieser die Metadaten katalogisiert und fast alle Anfragen durch ihn laufen; Googles Techniker haben allerdings durch Messungen gezeigt, dass dies (zumindest bis jetzt) nicht der Fall und GFS sehr wohl skalierbar ist. Der Master ist im Normalfall der leistungsfähigste Netzknoten im Netzwerk. Um die Ausfallsicherheit sicherzustellen, gibt es mehrere „Schatten-Master“, die den Hauptrechner spiegeln und notfalls, sollte der Master einmal ausfallen, sofort einspringen. Zusätzlich stehen die Schattenmaster auch für reine Leseanfragen, die ja den Haupttraffic ausmachen, zur Verfügung, so dass sich die Skalierbarkeit dadurch weiter erhöht. Engstellen gibt es nur selten, da Clients nur nach Metadaten fragen, die komplett im Arbeitsspeicher als B-Baum vorgehalten werden – sie sind sehr kompakt, pro Megabyte Daten fallen lediglich einige Bytes an. Durch den Einsatz nur eines Hauptknotens verringert sich die Softwarekomplexität drastisch, da Schreiboperationen nicht koordiniert werden müssen.