Répartir le stockage
Ce que ce chapitre apporte
- Distinguer les modes de raccordement du stockage : direct, en réseau de fichiers, en réseau de blocs.
- Expliquer le passage d'une grosse machine à un ensemble de machines ordinaires, et ce qu'il impose.
- Décrire le fonctionnement d'un système de fichiers distribué : découpe en blocs, réplication, catalogue.
- Calculer la durabilité obtenue par une réplication, et comparer avec un codage à effacement.
- Décrire les formes de stockage du cloud et ce qui les distingue réellement.
- Situer les couches d'une architecture de traitement de données massives.
Une machine plus grosse coûte cher, et finit toujours par ne plus exister en plus gros. Plusieurs machines ordinaires coûtent moins et n'ont pas de plafond, à une condition : accepter qu'elles tombent en panne, et concevoir le stockage pour que cela n'ait aucune conséquence. Toute l'infrastructure de ce chapitre découle de cette bascule, y compris ses aspects les moins intuitifs, comme le fait de conserver trois copies de chaque donnée.
Les trois chapitres précédents ont supposé les données accessibles, sans se demander où elles se trouvent. Cette question devient centrale dès que le volume dépasse ce qu'un disque contient, et sa réponse conditionne tout le reste : la façon dont un calcul se découpe, la vitesse à laquelle il lit, et ce qui se passe quand une machine s'arrête.
Trois façons de brancher du disque
DAS, pour direct attached storage : le disque est branché sur la machine, et seule cette machine le voit. C'est le disque d'un ordinateur ordinaire.
NAS, pour network attached storage : un boîtier expose des fichiers sur le réseau, via un protocole de partage. Plusieurs machines montent le même dossier et se partagent les fichiers.
SAN, pour storage area network : un réseau dédié expose des blocs de disque. La machine cliente voit ce qu'elle prend pour un disque local, et y installe son propre système de fichiers.
La distinction qui compte n'est pas la marque du boîtier mais le niveau auquel le partage a lieu.
| DAS | NAS | SAN | |
|---|---|---|---|
| Ce qui est exposé | un disque | des fichiers | des blocs |
| Qui gère le système de fichiers | la machine | le boîtier | la machine cliente |
| Partage entre machines | non | naturel | possible, mais délicat |
| Réseau | aucun | réseau courant | réseau dédié |
| Usage typique | poste de travail | dossiers partagés | bases de données, machines virtuelles |
Deux machines qui montent le même dossier NAS s'entendent, parce que le boîtier arbitre les accès concurrents aux fichiers.
Deux machines qui montent le même volume SAN avec un système de fichiers ordinaire détruisent les données en quelques secondes : chacune croit être seule à écrire les structures du système de fichiers. Il faut un système de fichiers prévu pour cela, ou bien réserver le volume à une seule machine.
C'est une erreur classique, et elle ne prévient pas : tout fonctionne jusqu'à la première écriture simultanée.
Ces trois modes partagent une limite : ils reposent sur un équipement, et cet équipement a une taille maximale, un prix qui croît plus vite que sa capacité, et une panne possible qui arrête tout ce qui en dépend.
Grossir, ou se multiplier
La mise à l'échelle verticale consiste à remplacer la machine par une plus puissante : plus de processeurs, plus de mémoire, plus de disques.
La mise à l'échelle horizontale consiste à ajouter des machines ordinaires et à répartir le travail entre elles.
La mise à l'échelle verticale ne demande aucun changement au logiciel, et c'est son immense avantage. Elle rencontre deux murs : un plafond physique, puisque la plus grosse machine du marché existe, et un prix qui croît plus vite que la capacité, un serveur deux fois plus puissant coûtant nettement plus du double.
La mise à l'échelle horizontale n'a pas de plafond et emploie du matériel bon marché. Elle exige en revanche que le logiciel sache répartir, ce qui est exactement le sujet du chapitre précédent, et elle rend les pannes ordinaires : sur mille machines, il en tombe une chaque semaine.
Un cluster est un ensemble de machines reliées par un réseau et pilotées comme une ressource unique. Chaque machine est appelée un nœud.
Les nœuds sont ordinaires et interchangeables. La disponibilité de l'ensemble ne vient pas de la fiabilité de chaque nœud, mais du fait qu'aucun nœud n'est indispensable.
La virtualisation se superpose souvent à cela sans la remplacer. Elle découpe une machine physique en plusieurs machines virtuelles, ce qui permet de mutualiser du matériel sous-employé, d'isoler des environnements et de déplacer une machine virtuelle d'un hôte à l'autre.
Dix machines virtuelles sur un hôte se partagent les disques, la mémoire et le réseau de cet hôte. Un traitement qui sature le disque le sature pour toutes les autres, et le voisin bruyant est une cause fréquente de lenteurs inexpliquées.
Plus grave dans le contexte des données réparties : trois copies d'un même bloc placées sur trois machines virtuelles du même hôte physique ne protègent de rien. La panne de l'hôte les emporte toutes les trois.
Un système de stockage réparti doit donc connaître la topologie physique, et pas seulement la liste des nœuds.
Le système de fichiers distribué
Un système de fichiers distribué présente un espace de nommage unique, alors que les données résident sur de nombreuses machines. Il repose sur trois mécanismes.
La découpe en blocs. Un fichier est coupé en blocs de taille fixe, souvent 128 mégaoctets, et chaque bloc est stocké indépendamment. Un fichier de 10 téraoctets occupe ainsi des dizaines de milliers de blocs répartis sur tout le cluster.
La réplication. Chaque bloc est copié sur plusieurs nœuds, classiquement trois, placés dans des emplacements physiques distincts.
Le catalogue. Un service dédié retient l'arborescence et, pour chaque bloc, la liste des nœuds qui en détiennent une copie. Il ne voit jamais les données elles-mêmes.
La séparation entre le catalogue et les données explique presque tout le comportement de ces systèmes. La lecture d'un fichier se déroule ainsi :
Le catalogue ne rend que des adresses. Les données, elles, passent directement du nœud qui les détient au client, sans jamais transiter par lui : c'est cette séparation qui permet à un seul service de cataloguer des pétaoctets sans en devenir le goulot d'étranglement. Les blocs suivants se lisent en même temps, sur d'autres nœuds.
Un disque lit à environ 200 mégaoctets par seconde. Cent nœuds lisant chacun un bloc différent au même moment délivrent 20 gigaoctets par seconde.
C'est la véritable raison d'être de la découpe en blocs : elle ne sert pas à faire tenir les fichiers, elle sert à les lire en parallèle. Un fichier stocké en un seul morceau sur un seul nœud n'irait pas plus vite que ce nœud.
Cela explique aussi pourquoi ces systèmes détestent les petits fichiers. Un million de fichiers d'un kilo-octet occupe un million d'entrées dans le catalogue, sature sa mémoire, et ne se lit pas plus vite qu'un fichier unique.
Transférer 128 mégaoctets sur le réseau prend du temps. Transférer le programme qui doit les traiter, quelques kilo-octets, n'en prend aucun.
Un moteur de traitement réparti demande donc au catalogue où se trouvent les blocs, puis lance chaque tâche sur un nœud qui détient déjà le bloc. La lecture devient locale, et le réseau n'est plus sollicité que pour le mélange.
Cette idée, appelée localité des données, est celle qui rend le motif du chapitre précédent efficace en pratique. Elle explique aussi pourquoi séparer le calcul du stockage, comme le fait le cloud, se paie en bande passante.
Combien de copies, et pourquoi trois
Répliquer coûte : trois copies occupent trois fois la place. Le nombre de copies n'est donc pas un réglage de confort, mais un arbitrage qui se calcule.
Le passage de deux à trois copies fait chuter la perte attendue d'un facteur cent, pour une place multipliée par un et demi seulement. C'est ce rapport, et non une tradition, qui a fixé trois comme valeur par défaut.
Le calcul ci-dessus suppose que les nœuds tombent indépendamment. Trois copies sur trois machines du même hôte physique, de la même baie, ou alimentées par le même onduleur ne sont pas indépendantes : un seul incident les emporte ensemble, et la probabilité réelle de perte n'est plus p³ mais p.
C'est pourquoi les systèmes de stockage réparti placent les copies selon la topologie : une copie sur le nœud local, une deuxième sur une autre baie, une troisième sur la même autre baie mais un nœud différent. Ce placement précis équilibre la tolérance aux pannes et le trafic entre baies.
Répliquer n'est pas la seule technique.
Un schéma 6+3 supporte la perte de trois fragments sur neuf en n'occupant qu'une fois et demie la taille des données, là où la réplication triple supporte deux pertes en occupant trois fois.
La contrepartie est le calcul : reconstituer un fragment perdu exige de lire les six autres et de refaire l'algèbre, alors qu'une réplication n'exige que de recopier. La lecture d'un fragment manquant devient donc coûteuse.
En pratique, les données récentes et souvent lues restent répliquées, et les données anciennes et rarement lues passent au codage à effacement. C'est le même arbitrage que partout : la place contre le temps.
Le stockage dans le cloud
Le cloud propose trois formes de stockage, qui correspondent aux trois niveaux vus plus haut.
| Forme | Ce qui est exposé | Correspond à | Usage typique |
|---|---|---|---|
| Stockage objet | des objets nommés, écrits en une fois | une variante du NAS, sans arborescence réelle | données brutes, archives, data lake |
| Stockage bloc | un volume attaché à une machine | un SAN | disque système, base de données |
| Stockage fichier | un partage réseau monté | un NAS | applications qui exigent un système de fichiers |
Le stockage objet range des objets identifiés par une clé dans des conteneurs, sans arborescence véritable : les barres obliques d'une clé ne sont qu'une convention d'affichage.
Un objet s'écrit en entier et se remplace en entier ; il ne se modifie pas au milieu. Cette contrainte, qui semble sévère, est précisément ce qui permet de le répliquer sur plusieurs sites sans coordination coûteuse, et d'atteindre une durabilité annoncée à onze chiffres après la virgule.
C'est la forme naturelle des données massives, et le socle de la plupart des data lakes.
Il change l'élasticité : la capacité s'obtient en quelques secondes et se rend aussi vite, ce qui transforme un investissement en dépense proportionnelle à l'usage.
Il change le modèle de coût : le stockage est bon marché, la lecture l'est moins, et la sortie des données hors du fournisseur se facture souvent plus cher que tout le reste. Un traitement mal placé peut coûter davantage en transfert qu'en calcul.
Il ne change pas la physique. Un octet met le même temps à traverser un continent, qu'il soit facturé ou non. Séparer le stockage du calcul, ce que fait le cloud par construction, supprime la localité des données décrite plus haut, et il faut la remplacer par des caches et par des formats de fichiers qui permettent de ne lire que les colonnes utiles.
Il ne change pas les responsabilités. Le fournisseur garantit la durabilité du support ; la conformité, le chiffrement, les droits d'accès et la localisation des données personnelles restent à la charge de celui qui les dépose.
Les couches d'une architecture de données
Les composants vus jusqu'ici s'organisent presque toujours de la même façon, quel que soit l'outillage retenu.
Collecte. Les données entrent, par lots ou en continu, depuis des sources hétérogènes. Règle : ne rien transformer ici, sinon l'erreur de transformation devient irrattrapable.
Stockage brut. Les données sont conservées telles qu'arrivées, dans un espace peu structuré. Règle : garder l'original, toujours, parce qu'aucun besoin futur n'est connu aujourd'hui.
Traitement. Nettoyage, croisement, agrégation, avec les motifs des chapitres précédents. Règle : rendre chaque traitement rejouable à l'identique.
Stockage exploitable. Les données mises en forme pour l'usage, modélisées pour l'analyse. Règle : modéliser selon les questions posées, sujet du chapitre sur l'entrepôt.
Restitution. Requêtes, indicateurs, visualisations. Règle : la couche visible ne doit contenir aucun calcul métier que les couches précédentes ne sachent reproduire.
Deux mots reviennent pour désigner les deux extrémités de cette chaîne, et ils ne sont pas interchangeables. Le data lake est le stockage brut : tout y entre, sans schéma imposé, et le sens est donné à la lecture. L'entrepôt est le stockage exploitable : le schéma est décidé avant l'écriture, et ce qui n'y rentre pas n'y entre pas. Les deux chapitres qui suivent traitent l'un et l'autre.
Exercices type
Exercice 1 : un fichier de 1,2 téraoctet est déposé dans un système de fichiers distribué à blocs de 128 mégaoctets, avec trois copies. Combien de blocs, et quelle place occupée ?
Afficher la solution
1,2 téraoctet vaut 1 200 000 mégaoctets, soit 9 375 blocs de 128 mégaoctets.
Avec trois copies, 28 125 blocs sont stockés, occupant 3,6 téraoctets sur le cluster.
Le catalogue, lui, ne retient que 9 375 entrées et leurs emplacements : quelques mégaoctets. C'est cette asymétrie qui permet à un seul service de cataloguer des pétaoctets, et qui explique en même temps sa fragilité face aux petits fichiers.
Exercice 2 : pourquoi un million de fichiers d'un kilo-octet posent-ils un problème là où un fichier d'un gigaoctet n'en pose aucun ?
Afficher la solution
Les deux représentent à peu près le même volume de données, et des charges totalement différentes pour le catalogue.
Un fichier d'un gigaoctet occupe huit entrées de blocs. Un million de petits fichiers occupe un million d'entrées de fichiers et un million d'entrées de blocs, chacune consommant de la mémoire dans le service de catalogue, qui les garde toutes en mémoire vive.
À la lecture, la différence est du même ordre : huit lectures séquentielles contre un million d'ouvertures, chacune passant par le catalogue. Le débit s'effondre.
Le remède habituel consiste à regrouper les petits fichiers en archives ou en fichiers colonnes avant de les déposer.
Exercice 3 : un cluster place les trois copies de chaque bloc sur trois machines virtuelles choisies au hasard parmi cent, hébergées sur dix hôtes physiques. Quel est le défaut ?
Afficher la solution
Rien ne garantit que les trois machines virtuelles soient sur des hôtes différents. Le tirage peut placer les trois copies sur le même hôte, et la panne de cet hôte perd le bloc définitivement malgré la triple réplication.
La probabilité n'est pas négligeable : avec dix hôtes équipeuplés, la probabilité que les deux autres copies rejoignent l'hôte de la première vaut environ 1 sur 100 par bloc. Sur cent mille blocs, cela fait un millier de blocs exposés à une panne unique.
La correction consiste à rendre le placement conscient de la topologie, en interdisant deux copies sur un même hôte physique, une même baie, ou une même alimentation.
Exercice 4 : un service conserve 800 téraoctets d'archives lues moins d'une fois par an. Le stockage est répliqué trois fois. Que proposer ?
Afficher la solution
Passer au codage à effacement. Un schéma 10+4 occupe 1,4 fois les données au lieu de 3, soit 1 120 téraoctets au lieu de 2 400, tout en tolérant quatre pertes simultanées au lieu de deux.
Le surcoût en calcul lors d'une reconstruction est réel, et sans importance ici : des archives lues moins d'une fois par an supportent une lecture plus lente.
C'est l'arbitrage inverse pour les données chaudes, lues en permanence par des traitements répartis, où la réplication garde l'avantage de permettre une lecture locale sur trois nœuds différents.
1.Quelle est la différence essentielle entre un NAS et un SAN ?
2.À quoi sert principalement la découpe d'un fichier en blocs ?
3.Trois copies d'un bloc sur trois machines virtuelles du même hôte physique…
4.Un schéma de codage à effacement 6+3 comparé à une réplication triple…
5.Quelle propriété du stockage objet permet sa réplication multi-sites peu coûteuse ?
6.Que ne change pas le passage au cloud ?
La méthode
- Nommer le niveau de partage avant de choisir un équipement : disque, fichier ou bloc.
- Préférer plusieurs machines ordinaires dès que le logiciel sait répartir, et l'accepter comme une contrainte de conception, pas comme un détail d'exploitation.
- Vérifier la topologie derrière les nœuds : hôte physique, baie, alimentation, avant de croire à l'indépendance des pannes.
- Calculer la durabilité plutôt que la supposer : le nombre de copies se justifie par un chiffre.
- Réserver le codage à effacement aux données froides, et la réplication aux données lues par des traitements répartis.
- Regrouper les petits fichiers avant de les déposer dans un système de fichiers distribué.
- Rapprocher le calcul de la donnée, ou à défaut ne lire que les colonnes utiles.
- Conserver le brut, systématiquement, dans une couche que rien ne transforme.
Synthèse
- DAS, NAS et SAN se distinguent par le niveau du partage : un disque, des fichiers, des blocs.
- Deux machines qui montent un même volume SAN sans système de fichiers prévu pour cela détruisent les données.
- La mise à l'échelle verticale n'exige rien du logiciel et rencontre un plafond ; l'horizontale n'a pas de plafond et exige tout.
- Sur un cluster, la panne d'un nœud est un événement ordinaire, pas un incident.
- La virtualisation partage une ressource, elle n'en crée pas, et fausse l'indépendance des pannes.
- Un système de fichiers distribué repose sur trois mécanismes : découpe en blocs, réplication, catalogue.
- Le catalogue ne voit jamais les données, seulement les adresses : c'est ce qui lui permet de cataloguer des pétaoctets.
- La découpe en blocs sert le parallélisme de lecture, pas la place.
- Ces systèmes détestent les petits fichiers, qui saturent le catalogue sans rien accélérer.
- Trois copies ne sont pas une tradition : le passage de deux à trois divise la perte attendue par cent pour une place multipliée par 1,5.
- Le calcul de durabilité suppose des pannes indépendantes, ce que seule une politique de placement garantit.
- Le codage à effacement tolère davantage en occupant moins, au prix du calcul de reconstruction.
- Le cloud offre trois formes, objet, bloc, fichier, dont la première est le socle des data lakes.
- Le cloud change l'élasticité et le coût, jamais la physique ni les responsabilités réglementaires.
- Cinq couches : collecte, stockage brut, traitement, stockage exploitable, restitution.