Clip GIF del ballo di Rachel da “Friends” è cresciuto a centinaia di gigabyte, travolgendo i backup di Discourse
Breve riepilogo
Discourse è una popolare piattaforma per discussioni online, attualmente con oltre 22 000 comunità.
Recentemente, durante il backup del sito, si è verificato un problema critico: un file GIF (1,6 MB) è stato copiato dagli utenti 246 173 volte, superando il limite di hard link nel filesystem ext4 e facendo aumentare la dimensione del backup a 377 GB.
Di seguito una dettagliata analisi della situazione, delle cause e delle soluzioni.
1. Cosa è successo?
Elemento Dati Piattaforma Discourse Numero di comunità >22 000 File‑problema GIF “Rachel da Friends”, dimensione 1,6 MB Numero di copie 246 173 (hard link) Limite ext4 ~65 000 hard link per inode Dimensione finale del backup 377 GB
Perché è accaduto?
Discourse consente l’inserimento di emoji e GIF in qualsiasi messaggio.
Quando si sposta un file da un contesto all’altro (es. da una chat privata a un post pubblico), il sistema crea una nuova copia con un hash SHA‑1 casuale. Ciò significa che, anche se il contenuto è identico, Discourse lo considera un nuovo oggetto.
Di conseguenza, uno stesso GIF può comparire in decine di migliaia di messaggi e chat private – ogni volta viene generato un file distinto. Alla fine 246 173 copie hanno superato il limite ext4, e il sistema ha iniziato a creare nuovi file invece di hard link, causando la “perdita” di 181 000 backup.
2. Prima soluzione: raccolta per hash
Discourse ha tentato inizialmente di risolvere il problema raggruppando i caricamenti per SHA‑1:
1. Durante il backup, tutti i file venivano raggruppati per hash identico.
2. Viene caricato solo il primo file di ogni gruppo.
3. Per gli altri vengono creati hard link.
Sembra elegante – ma non teneva conto del limite ext4 sul numero di link. Una volta raggiunto il limite, il sistema creava automaticamente nuovi file invece dei link, e la dimensione del backup è aumentata drasticamente.
3. Nuova soluzione: “switch” in caso di errore EMLINK
Discourse ha sviluppato una strategia più flessibile:
1. Si crea un hard link sul file come al solito.
2. Se il filesystem restituisce l’errore EMLINK (limite link superato), la copia successiva diventa “principale”.
3. Da quel momento in poi i nuovi link vengono creati verso questa nuova versione principale.
Così, ad ogni superamento del limite, si passa a un nuovo file “genitore”, e il sistema continua a funzionare senza errori. Questa soluzione è compatibile con qualsiasi filesystem e non richiede configurazioni aggiuntive.
4. Conclusioni
- Un popolare GIF (il ballo di Rachel da Friends) ha causato l’aumento del backup a 377 GB.
- Il limite ext4 di ~65 000 hard link si è rivelato un fattore critico.
- La prima soluzione con raccolta per hash non considerava i limiti del filesystem, portando alla perdita di dati.
- La nuova strategia “switch” in caso di errore EMLINK consente di gestire correttamente un grande numero di copie mantenendo l’efficienza del backup.
> *“Ora sappiamo che Jennifer Aniston può fare test di stress sull’infrastruttura,”* ha ironicamente affermato Discourse nel suo blog.
Commenti (0)
Condividi la tua opinione — per favore, sii cortese e resta in tema.
Accedi per commentare