Google-Dateisystem

Google File System (GFS) ist einproprietäresverteiltes Dateisystem. Es wurde von Google für eigene Anwendungen entwickelt. Es scheint nicht öffentlich verfügbar zu sein und basiert aufGPL-Code(ext3undLinux).

Design

GFS wurde entwickelt, um die Datenspeicheranforderungen von Google-Anwendungen zu erfüllen, insbesondere für alles, was mit den Websuchaktivitäten zu tun hat. Dieses Dateisystem entstand aus einem ersten Projekt, das bei Google, BigFiles , initiiert wurde , als das Unternehmen noch in Stanford ansässig war .

Es ist für die Verwaltung großer Dateien (bis zu mehreren Gigabyte ) und für den allgemeinen Betrieb von Google-Anwendungen optimiert : Dateien werden sehr selten gelöscht oder neu geschrieben, die meisten Zugriffe beziehen sich auf große Bereiche und bestehen hauptsächlich aus Lesungen oder Ergänzungen am Ende von die Datei ( Datensatz anhängen ); GFS wurde daher entwickelt, um die Verarbeitung dieser Transaktionen zu beschleunigen. Es wurde auch für die Arbeit mit Google- Clustern optimiert , die aus einer sehr großen Anzahl von „Standard“ -Maschinen bestehen. Es wurden daher besondere Vorkehrungen getroffen, um Datenverluste aufgrund häufiger Fehler zu vermeiden, die bei diesem Gerätetyp auftreten können. Aufgrund der sehr großen Größe der Dateien werden sie in Blöcke geschnitten, die auf verschiedenen Computern gespeichert sind.

Dateien

Da die Dateien sehr groß sind, werden sie in 64-  MB- Blöcke geschnitten, die als Chunks bezeichnet werden . Jeder Block verfügt über eine eindeutige 64-Bit-Kennung sowie eine Versionsnummer, um Dateninkonsistenzen zu erkennen (z. B. wenn ein Chunkserver Änderungen an einer Datei verpasst hat, während diese offline war). Eine Datei wird im System in mehreren Kopien repliziert. Wenn also eine Kopie verloren geht (aufgrund eines Ausfalls des Servers, auf dem sie gespeichert ist), ist die Datei normalerweise weiterhin verfügbar. Die durchschnittliche Anzahl von Kopien einer Datei beträgt drei, es kann jedoch viel mehr Kopien für Dateien geben, auf die häufig zugegriffen wird, z. B. ausführbare Dateien. Die verschiedenen Kopien werden natürlich auf verschiedenen Knoten gespeichert.

Chunk

Die Größe eines Blocks beträgt normalerweise 64  MB . Diese Größe kann jedoch in einigen Fällen geändert werden. Auf der Ebene eines Chunkservers wird jeder Chunk weiter in Blöcke von 64  KB mit jeweils einer Prüfsumme geschnitten . Daher berechnet der Server vor dem Senden der Daten, die sich auf diesen Block beziehen, diese Prüfsumme neu und vergleicht sie mit dem gespeicherten Wert, um mögliche Datenänderungen zu erkennen. Ein Block wird als einzelne Linux- Datei gespeichert .

Knoten

Es gibt zwei verschiedene Typen von Systemknoten  : den Master und den Chunkserver :

Meister

Jeder Cluster hat einen Master . Die Dateien werden nicht direkt gespeichert, sondern alle Metadaten verwaltet  : die Namespace- Informationen und insbesondere die Korrespondenz zwischen jeder Datei und den Blöcken , aus denen sie besteht, sowie die Knoten, auf denen diese Blöcke gespeichert sind . Es ist dafür verantwortlich, die Integrität der gespeicherten Daten zu überprüfen, und er gibt den Dateien Schreibberechtigungen. Schließlich ist es dafür verantwortlich, die Platzierung der Blöcke im System zu bestimmen, die Belastung des Netzwerks auszugleichen und sicherzustellen, dass jeder Block über eine ausreichende Anzahl von Kopien verfügt. Es kommuniziert regelmäßig mit den Chunkservern über Heartbeat- Signale , sodass es den Status und die Anzahl der Kopien kennt.

Der Master die empfindlichsten Stelle des Systems zu sein, es hat immer einen Spiegel, ständig aktualisiert und in der Lage es im Fall eines Problems zu ersetzen. Der Master wurde so konzipiert, dass er mindestens mit den Clients des Dateisystems interagiert: Als zentrale Komponente muss vermieden werden, dass es zu einem Engpass kommt .

Chunkserver

Die meisten Knoten sind von diesem Typ. Ihre Aufgabe ist es, Blöcke zu speichern und Lese- und Schreibzugriff durchzuführen. Bei Schreibvorgängen wird einer der Server, auf denen der betreffende Block gespeichert ist, als primäre Kopie festgelegt. Es führt die Schreiboperation aus und weist dann die sekundären Kopien an, dieselbe Operation auszuführen. Dieses System stellt sicher, dass Schreibvorgänge für alle Replikate in derselben Reihenfolge ausgeführt werden, während die Interaktionen mit dem Master minimiert werden .

Operationen

lesen

Um eine Lesung durchzuführen, ein Client beginnt mit dem geforderten Master für die Adresse der Maschinen mit einer Kopie des Chunk , dass Interessen ihn. Wenn in der betreffenden Zone kein Schreibvorgang ausgeführt wird, gibt der Master die Liste dieser Maschinen zurück. Der Kunde wendet sich dann direkt an einen der Chunkserver, der ihm die gewünschten Daten sendet.

Schreiben

Für Schreibvorgänge verwendet GFS ein Lease-System: Es wählt einen der Chunkserver aus , der eine Kopie des Blocks besitzt, und gewährt ihm das Recht, Schreibvorgänge für einen begrenzten Zeitraum auszuführen. Dieser Server heißt dann "primär". Der Master sendet dem Client dann die Adresse der primären und sekundären Kopien. Der Client kann dann die Daten an die verschiedenen Server senden und dann die Ausführung seines Schreibvorgangs anfordern. Alle während dieses Vorgangs auftretenden Fehler werden vom Kunden behandelt, um die Arbeit des Masters zu erleichtern .

Prüfsummen aktualisieren

Während eines Schreibvorgangs müssen Clients die Prüfsumme der betroffenen Blöcke ( 64  KB ) aktualisieren . Die Methode zur Berechnung dieser Summe wurde für Additionsoperationen am Ende der Datei optimiert: Es ist möglich, die Prüfsumme des letzten noch teilweise gefüllten Blocks zu erhöhen, ohne sie vollständig neu berechnen zu müssen. Um andererseits einen Bereich einer Datei neu zu schreiben, muss die Prüfsumme vor dem Vorgang überprüft und nach dem Schreiben neu berechnet werden. Wenn die Summe zuvor nicht überprüft wurde, muss dies möglich sein dass der Block Fehler enthält, die nach der Operation nicht mehr erkennbar sind, und dass der Block als gültig angesehen wird, wenn dies nicht der Fall ist.

Datenfluss

Während eines Schreibvorgangs werden die Daten wie eine Pipeline übertragen  : Der Client sendet die zu schreibenden Daten zusammen mit der Liste der anderen Kopien an die Primärdatenbank. Der Primärversuch versucht, in der Liste den Computer zu finden, der ihm am nächsten liegt (die IP-Adressen sind so verteilt, dass sie zum Schätzen der Entfernung zwischen zwei Computern verwendet werden können), und sendet ihm die Daten mit der Liste der Computer, die keine haben erhielt sie noch. Somit empfangen alle Replikate Schritt für Schritt die Daten. Da sich das Netzwerk im Vollduplexmodus befindet , kann ein Server Daten senden, sobald er mit dem Empfang beginnt. Dieses System ermöglicht die Gruppierung von Datenflüssen und fordert den Client nur einmal auf, die Daten zu senden.

Quellen