Un clip GIF de la danse de Rachel dans « Friends » a atteint des centaines de gigaoctets, submergeant les sauvegardes de Discourse
Résumé
Discourse est une plateforme populaire pour les discussions en ligne, avec actuellement plus de 22 000 communautés.
Récemment, lors d’une sauvegarde du site, un problème critique s’est produit : un fichier GIF (1,6 Mo) a été copié par les utilisateurs 246 173 fois, dépassant la limite des liens physiques dans le système de fichiers ext4 et entraînant une augmentation de la taille de la sauvegarde à 377 Go.
Ci‑dessous, analyse détaillée de la situation, des causes et des solutions.
1. Que s’est-il passé ?
ÉlémentDonnéesPlateformeDiscourseNombre de communautés>22 000Fichier-problèmeGIF «Rachel de Friends», taille 1,6 MoNombre de copies246 173 (liens physiques)Limite ext4~65 000 liens physiques sur un inodeTaille finale de la sauvegarde377 Go
Pourquoi cela s’est-il produit ?
Discourse permet d’insérer des emojis et des fichiers GIF dans n’importe quel message.
Lors du déplacement d’un fichier d’un contexte à un autre (par exemple, d’une conversation privée vers un post public), le système crée une nouvelle copie avec un hash SHA‑1 aléatoire. Cela signifie que même si le contenu est identique, Discourse le considère comme un nouvel objet.
Ainsi, un GIF peut apparaître dans des dizaines de milliers de messages et de chats privés – chaque fois un fichier distinct est généré. Au final, 246 173 copies ont dépassé la limite ext4, et le système a commencé à créer de nouveaux fichiers au lieu de liens physiques, entraînant une « perte » de 181 000 sauvegardes.
2. Première solution – agrégation par hash
Discourse a d’abord tenté de résoudre le problème en regroupant les téléchargements par SHA‑1 :
1. Lors de la sauvegarde, tous les fichiers étaient rassemblés en groupes ayant le même hash.
2. Seule la première copie de chaque groupe était chargée.
3. Des liens physiques étaient créés pour les autres copies.
Cela semblait élégant – mais ne prenait pas en compte la limitation ext4 sur le nombre de liens. Dès que la limite était atteinte, le système créait automatiquement de nouveaux fichiers au lieu de liens, et la taille de la sauvegarde a explosé.
3. Nouvelle solution – « basculement » lors d’une erreur EMLINK
Discourse a développé une stratégie plus flexible :
1. Un lien physique vers le fichier est créé comme d’habitude.
2. Si le système de fichiers renvoie l’erreur EMLINK (limite de liens dépassée), la copie suivante devient le « fichier principal ».
3. À partir de ce moment, les nouveaux liens sont créés vers cette nouvelle version principale.
Ainsi, à chaque dépassement de limite, un nouveau “parent” est sélectionné et le système continue sans erreur. Cette solution est compatible avec tout système de fichiers et ne nécessite aucune configuration supplémentaire.
4. Résultats et conclusions
- Un GIF populaire (la danse de Rachel de Friends) a provoqué l’augmentation de la sauvegarde à 377 Go.
- La limitation ext4 d’environ 65 000 liens physiques s’est avérée critique.
- La première solution d’agrégation par hash n’a pas pris en compte les contraintes du système de fichiers, entraînant une perte de données.
- La nouvelle stratégie de basculement lors d’une erreur EMLINK permet de gérer correctement un grand nombre de copies tout en conservant l’efficacité de la sauvegarde.
> *« Maintenant nous savons que Jennifer Aniston peut effectuer des tests de stress sur l’infrastructure »,* a déclaré Discourse avec ironie dans son blog.
Commentaires (0)
Partagez votre avis — merci de rester courtois et dans le sujet.
Connectez-vous pour commenter