Google File System

Architecture Générale

GFS, késako ?

GFS c'est un système de fichier distribué. Il est optimisé pour le stockage de données ultra volumineuses. Ce système est en place au sein des datacenters de Google depuis 2001.

ps: Chunk = morceau :)

Architecture

Principe général:

Chaque fichier est découpé en morceau, puis répartis sur un ensemble de serveurs appelés Chunks Servers. Un Master Server connait à chaque instant la localisation des morceaux.

Un Client GFS interroge le Master Server pour connaitre le(s) morceau(x) du fichier sur lequel il souhaite intervenir. Le Master server renvoit les informations aux client GFS qui interroge ensuite les Chunks Server.

Ce système de fichier est peu conventionnel car l'OS des Master Server et des Chunks Servers s'appuient sur leur propre système de fichier.

Ses composants

Le Master Server

Il tient à jour un ensemble de Metadatas. Ces Métadatas sont stockées en RAM pour des raisons de performance, voici ce qu'elles contiennent :

Le Master Server est répliqué afin d'éviter la perte de données. En cas de plantage, il existe un fichier appelé Operation Log, Il contient les derniers opérations effectuées , et qui ont pues être intérompues lors de ce plantage. Pour repartir, il suffit de rejouer les opérations de ce fichier. Il reste une seule information qui n'est pas dupliquée/sauvegardée: La localisation des Morceaux sur les Chunks Server. Cette information est reconstruite au (re)démarrage du Master Server, où tout les Chunks Server transmettent aux Master Server la liste des morceaux qu'ils possédent.

Le Master Server dirige des opérations courantes tel que la garbage collection des Chunks, ou encore la migration des chunks entre les Chunks Servers (réplication et/ou load balancing)


Les Chunks Servers

Les Chunks Servers stockent les morceaux. Il faut savoir que chaque morceau est répliqué trois fois dans le but de reduire le risque de perte de données. Cette réplication a un impact sur les capacités de stocage que le cluster doit avoir (ex: 30To au lieu de 10 To !).

Chaque morceau est identifié par un ID unique appelé Chunk Handle.
La taille de chaque morceau est fixée à 64Mo. Cette valeur peut être comparé à la taille des blocs sur le système de fichier ext3. En ext3, la taille des blocs est généralement 8Ko. La taille des "blocs" dans GFS est donc trés grande.



Le Client GFS

Le cluster GFS est attaqué par des clients GFS. Ce n'est pas vous où moi, internaute que l'intérrogeons. Google utilise des surcouches tel que Big Table ou Map Reduce pour y accèder. Je ne les traiterai pas sur ce site.