3 À grande échelle, la panne matérielle n’est pas un événement, c’est une constante. Les disques lâchent, les nœuds redémarrent, les sites tombent, et un système de stockage doit préserver l’intégrité de vos données malgré tout cela. Deux approches dominent : conserver des copies supplémentaires des données (la réplication) ou découper les données en fragments auxquels on ajoute de la parité (le codage à effacement). Le choix entre les deux détermine vos dépenses en capacité brute, la durabilité de vos données et les performances du système. Il n’y a pas de gagnant universel. Il y a la bonne solution pour un profil de données et une échelle donnés. Qu’est-ce que la réplication ? La réplication repose sur une idée simple : conserver plusieurs copies identiques des données sur du matériel distinct. Si une copie est perdue, le système sert les données à partir d’une autre et reconstruit la copie manquante. La configuration la plus courante conserve trois copies, souvent notée réplication 3x (en anglais). Son attrait tient à sa simplicité. Les écritures et les lectures sont directes, la latence est faible puisque n’importe quelle copie complète peut répondre à une requête, et la restauration est facile, car reconstruire une copie perdue revient à copier une copie existante. Pour les petits fichiers, les données chaudes et les charges de travail sensibles à la latence, la réplication est difficile à battre. Le revers, c’est le coût. Conserver trois copies signifie stocker trois fois la capacité brute des données réelles, soit 200 % de surcoût en plus des données elles-mêmes. Stockez un pétaoctet utile en 3x et vous achetez trois pétaoctets de disque brut. À petite échelle, c’est acceptable. À l’échelle du pétaoctet et au-delà, cela devient le premier poste du budget de stockage. Qu’est-ce que le codage à effacement ? Le codage à effacement protège les données par les mathématiques plutôt que par des copies complètes. Le système découpe un objet en k fragments de données, calcule à partir d’eux m fragments de parité supplémentaires, et répartit l’ensemble des k+m fragments sur des domaines de défaillance distincts, comme des disques, des nœuds ou des sites différents. Propriété clé : l’objet d’origine peut être reconstruit à partir de n’importe quels k fragments, ce qui signifie que le système peut perdre jusqu’à m fragments simultanément tout en restituant les données. Un exemple illustre bien cette efficacité. Un schéma 8+4 découpe chaque objet en 8 fragments de données et 4 fragments de parité, soit 12 au total. Vous pouvez en perdre 4 quelconques sur 12 et reconstruire quand même l’objet. Le surcoût de stockage correspond au total divisé par les données, soit 12/8, c’est-à-dire 1,5 fois les données : 50 % de surcoût. Comparez avec les 200 % de la réplication 3x, souvent pour une tolérance aux pannes comparable, voire meilleure. Cet écart explique pourquoi le codage à effacement domine l’économie du stockage à grande échelle. Comment cela fonctionne, en bref La plupart des systèmes utilisent le codage de Reed-Solomon. Inutile de maîtriser l’algèbre pour prendre de bonnes décisions. Le modèle mental suffit : les données sont découpées, la parité est calculée pour que n’importe quels k fragments contiennent assez d’informations pour reconstruire l’ensemble, et les fragments sont répartis de sorte qu’aucune panne unique, et souvent aucune panne de site, n’en emporte plus que le schéma ne peut en tolérer. Les compromis, face à face Aucune des deux approches n’est simplement meilleure. Elles arbitrent des éléments différents. Efficacité du stockage et coût C’est l’avantage décisif du codage à effacement. Un schéma typique stocke les données à environ 1,2x à 1,5x, là où la réplication 3x les stocke à 3x. Sur de grands volumes, cette différence peut réduire de moitié ou plus la capacité brute, ainsi que l’alimentation, le refroidissement et l’espace en rack associés. Plus l’environnement est grand, plus les économies sont importantes. Durabilité Les deux approches peuvent atteindre une durabilité très élevée (en anglais), généralement exprimée en nombre de « neuf ». La durabilité de la réplication dépend du nombre de copies et de leur indépendance face aux pannes. Le codage à effacement permet de régler directement la durabilité via le choix de k et m : augmenter m accroît le nombre de pannes simultanées que l’on peut supporter, généralement pour un coût en capacité bien inférieur à l’ajout d’une réplique complète. Pour un niveau de protection donné, le codage à effacement y parvient en général avec moins de surcoût. Performances C’est là que la réplication justifie sa place. Comme n’importe quelle copie complète peut servir une lecture, la réplication offre une faible latence et gère bien les charges de travail sur petits objets et en accès aléatoire, sans calcul de parité sur le chemin d’écriture. Le codage à effacement ajoute du calcul pour encoder la parité, et la reconstruction d’un objet peut nécessiter la lecture de plusieurs fragments sur différents équipements, ce qui entraîne une amplification des lectures et du trafic réseau. En règle générale, la réplication favorise les données petites et chaudes, tandis que le codage à effacement favorise le débit sur les gros objets. Les implémentations modernes ont réduit l’écart : considérez ces points comme des tendances à valider pour votre charge de travail, pas comme des lois immuables. Reconstruction et restauration Lorsqu’un équipement tombe en panne, la réplication reconstruit en copiant une réplique intacte, ce qui est rapide et simple mais concentre la charge sur la source de la copie. Le codage à effacement reconstruit en lisant k fragments et en recalculant le fragment manquant, ce qui consomme davantage de CPU et de réseau mais répartit le travail sur de nombreux équipements. À très grande échelle, la façon dont un système gère la reconstruction, et le fait qu’une tempête de reconstructions dégrade ou non la production, comptent autant que les performances en régime normal. Domaines de défaillance et géographie Le codage à effacement a un seuil pratique : il faut au moins k+m domaines de défaillance indépendants pour placer les fragments, ce qui explique en partie pourquoi les petits clusters s’appuient sur la réplication. Le placement peut être local (fragments répartis sur les disques et nœuds d’un même site) ou géodistribué (fragments répartis sur plusieurs sites). Le codage à effacement géodistribué peut protéger contre la perte complète d’un site avec un surcoût bien moindre que la réplication de tout sur chaque site, au prix d’une latence et d’une bande passante intersites accrues. La réplication entre sites (en anglais) est plus simple mais multiplie la capacité par le nombre de sites. Échelle L’échelle fait la différence. Sur de petits volumes, le surcoût de la réplication est abordable et sa simplicité a beaucoup de valeur. À l’approche de l’échelle du pétaoctet (en anglais) et au-delà, la taxe du 3x devient difficile à justifier, et le codage à effacement devient la norme pour la capacité de masse. Quand utiliser l’un ou l’autre Optez pour la réplication lorsque les données sont petites, chaudes ou sensibles à la latence, lorsque le cluster est petit ou lorsque la simplicité opérationnelle est prioritaire. Les métadonnées, les jeux de travail actifs et les charges de travail sur petits objets s’y prêtent naturellement. Optez pour le codage à effacement lorsque les objets sont volumineux, lorsque les données sont tièdes ou froides (en anglais) et gourmandes en capacité, lorsque vous êtes à l’échelle du pétaoctet, lorsque la pression sur les coûts est réelle ou lorsque vous avez besoin d’une durabilité élevée sans tripler la capacité. Les sauvegardes, les archives (en anglais), les médias et les grands jeux de données non structurées s’y prêtent naturellement. En pratique, les meilleurs systèmes ne choisissent pas une fois pour toutes. Ils combinent. Un modèle courant réplique les données petites et chaudes pour la vitesse et applique le codage à effacement aux données volumineuses et froides pour l’efficacité. Certains systèmes répliquent à l’ingestion pour un acquittement rapide, puis convertissent en codage à effacement en arrière-plan. Ajoutez la hiérarchisation et le placement multisite, et vous obtenez une protection adaptée à chaque partie des données plutôt qu’une politique unique et grossière. Idées reçues courantes Quelques mythes conduisent à de mauvaises décisions. « Le codage à effacement est toujours plus lent. » Pas vraiment. Pour les gros objets et les charges de travail axées sur le débit, il peut être excellent. Le coût en performances apparaît surtout avec les petits objets et les accès sensibles à la latence, précisément là où un niveau répliqué a sa place. « Le codage à effacement ne convient qu’aux archives froides. » C’est de moins en moins vrai. Des supports plus rapides et de meilleures implémentations ont rendu le codage à effacement viable pour les données actives dans de nombreux systèmes. « Davantage de parité ne coûte rien. » C’est faux. Augmenter m améliore la tolérance aux pannes et coûte relativement peu de capacité, mais ajoute du travail d’encodage et de reconstruction et exige suffisamment de domaines de défaillance pour placer les fragments. Concevez k et m en fonction de votre modèle de pannes réel, et non du maximum théorique. Récapitulatif CritèreRéplication (par exemple 3x)Codage à effacement (par exemple 8+4)Surcoût de stockageÉlevé (200 % en 3x)Faible (environ 50 % en 8+4)Tolérance aux pannesSupporte la perte de N-1 copiesSupporte la perte de jusqu’à m fragmentsCharges de travail idéalesPetites, chaudes, sensibles à la latenceGros objets, forte capacité, tièdes/froidesReconstructionCopie rapide, charge concentréeRecalcul à partir de k fragments, charge répartieEmpreinte minimaleQuelques nœudsAu moins k+m domaines de défaillanceUsage typiqueMétadonnées, niveau chaud, petits clustersCapacité de masse à l’échelle du pétaoctet, sauvegardes, archives Synthèse Codage à effacement contre réplication n’est pas une bataille avec un seul vainqueur. C’est un choix de conception à faire selon le profil des données et l’échelle. La réplication offre simplicité et faible latence pour un coût en capacité élevé. Le codage à effacement offre une efficacité de capacité spectaculaire et une durabilité élevée et réglable, au prix de davantage de calcul et d’une conception plus soignée des domaines de défaillance. Pour la plupart des environnements à grande échelle et de stockage objet (en anglais), le choix par défaut raisonnable est le codage à effacement pour la capacité de masse, avec un niveau répliqué réservé aux données petites, chaudes et sensibles à la latence. Quel que soit votre choix, concevez délibérément vos domaines de défaillance, dimensionnez k et m selon votre risque réel et testez le comportement du système pendant une reconstruction, et pas seulement lorsque tout va bien. C’est là que l’échelle tient ou s’effondre. Questions fréquentes Le codage à effacement est-il meilleur que la réplication ? Pas de façon universelle. Le codage à effacement est bien plus efficace en stockage et atteint une durabilité élevée avec un surcoût moindre, ce qui en fait le choix habituel à grande échelle. La réplication est plus simple et plus rapide pour les données petites, chaudes et sensibles à la latence. La plupart des grands systèmes utilisent les deux. Combien de stockage le codage à effacement fait-il économiser par rapport à la réplication ? Beaucoup, à grande échelle. Là où la réplication 3x stocke les données à 3 fois la capacité brute (200 % de surcoût), un schéma comme 8+4 les stocke à environ 1,5 fois (50 % de surcoût), souvent avec une tolérance aux pannes comparable, voire meilleure. Le codage à effacement est-il plus lent que la réplication ? Il peut l’être pour les petits objets et les accès sensibles à la latence, en raison du calcul de parité et de la lecture de plusieurs fragments. Pour le débit sur les gros objets, il se comporte bien. Le bon modèle associe souvent un niveau chaud répliqué à un niveau de capacité en codage à effacement. Que signifient k et m dans le codage à effacement ? k est le nombre de fragments de données en lesquels un objet est découpé, et m le nombre de fragments de parité ajoutés. On stocke k+m fragments et on peut en perdre jusqu’à m. Un schéma 8+4 a k=8 et m=4. Peut-on utiliser ensemble le codage à effacement et la réplication ? Oui, et de nombreux systèmes le font. Une approche courante réplique les données petites et chaudes pour la vitesse et applique le codage à effacement aux données volumineuses et froides pour l’efficacité, en répliquant parfois à l’ingestion puis en convertissant plus tard en codage à effacement. Pour aller plus loin : stockage objet vs stockage bloc (en anglais), la durabilité dans les systèmes haute densité (en anglais) et le stockage objet distribué (en anglais).