Clipul GIF cu dansul Rachel din „Friends” a crescut la sute de gigabytes, distrugând backup-urile Discourse
Conținut sumar
Discourse este o platformă populară pentru discuții online, pe care în prezent există peste 22 000 de comunități.
Recent, în timpul unei copii de rezervă a site-ului, a apărut o problemă critică: un fișier GIF (1,6 Mo) a fost copiat de utilizatori de 246 173 ori, depășind limita de legături dure din sistemul de fișiere ext4 și ducând la creșterea dimensiunii backup-ului la 377 Go.
Mai jos găsiți o analiză detaliată a situației, cauzelor și soluțiilor.
1. Ce s-a întâmplat?
ElementDatePlatformăDiscourseNumăr de comunități>22 000Fișier-problemăGIF „Rachel din „Friends””, dimensiune 1,6 MoNumărul de copii246 173 (legături dure)Limita ext4≈65 000 legături dure pe un inodeDimensiunea finală a backup-ului377 Go
De ce s-a întâmplat asta?
Discourse permite inserarea emoji și fișiere GIF în orice mesaj.
Când se mută un fișier dintr-un context în altul (de exemplu, dintr-o conversație privată într-un post public), sistemul creează o copie nouă cu un hash SHA‑1 aleator. Aceasta înseamnă că, chiar dacă conținutul este identic, Discourse îl consideră ca un obiect nou.
Astfel, un singur GIF poate apărea în zeci de mii de mesaje și conversații private – fiecare dată se generează un fișier separat. În final, 246 173 copii au depășit limita ext4, iar sistemul a început să creeze noi fișiere în loc de legături dure, ducând la „pierderea” a 181 000 de copii de rezervă.
2. Prima soluție – agregare pe hash
Discourse a încercat inițial să rezolve problema grupând descărcările după SHA‑1:
1. În timpul backup-ului toate fișierele erau grupate în funcție de același hash.
2. Se încărca doar prima copie din fiecare grupă.
3. Pentru celelalte se creau legături dure.
Aceasta părea elegantă – dar nu a luat în considerare limita ext4 privind numărul de legături. Odată ce limita era atinsă, sistemul crea automat noi fișiere în loc de legături, iar dimensiunea backup-ului creștea brusc.
3. Noua soluție – „comutare” la eroarea EMLINK
Discourse a dezvoltat o strategie mai flexibilă:
1. Se creează o legătură dură la fișier, ca de obicei.
2. Dacă sistemul de fișiere returnează eroarea EMLINK (limita de legături depășită), următoarea copie devine „fișierul principal”.
3. De atunci, noile legături se creează din nou către această versiune principală nouă.
Astfel, la fiecare depășire a limitei se comută pe un nou fișier „părinte”, iar sistemul continuă să funcționeze fără erori. Această soluție este compatibilă cu orice sistem de fișiere și nu necesită configurări suplimentare.
4. Concluzii și lecții învățate
- Un GIF popular (dansul Rachel din „Friends”) a cauzat creșterea backup-ului la 377 Go.
- Limita ext4 de aproximativ 65 000 legături dure s-a dovedit a fi un factor critic.
- Prima soluție cu agregare pe hash nu a luat în considerare limitările sistemului de fișiere, ducând la pierderea datelor.
- Noua strategie de „comutare” la eroarea EMLINK permite gestionarea corectă a unui număr mare de copii și menținerea eficienței backup-ului.
> *„Acum știm că Jennifer Aniston poate face testuri de stres pentru infrastructură,”* — a remarcat cu ironie Discourse în blogul său.
Comentarii (0)
Împărtășește-ți opinia — te rugăm să fii politicos și să rămâi la subiect.
Autentifică-te pentru a comenta