Rachel’in “Friends” dizisindeki dans GIF’i yüzlerce gigabayt büyüdü ve Discourse yedeklerini çöktürdü
Kısa Özet
Discourse, şu anda 22 000’den fazla topluluğa sahip popüler bir çevrimiçi tartışma platformudur.
Son zamanlarda sitenin yedeklenmesi sırasında kritik bir sorun ortaya çıktı: kullanıcılar tarafından 246 173 kez kopyalanan (1,6 MB) tek bir GIF dosyası, ext4 dosya sistemindeki sabit bağlantı sınırını aştı ve yedekleme boyutunu 377 GB’ye çıkardı.
Aşağıda durumun ayrıntılı analizi, nedenleri ve çözümleri yer alıyor.
1. Ne oldu?
Discourse verileri Topluluk sayısı>22 000 Dosya sorunu GIF “Rachel from Friends”, boyut 1,6 MB Kopya sayısı 246 173 (sabit bağlantılar) ext4 sınırı ~65 000 sabit bağlantı bir inode için Yedekleme toplam boyutu 377 GB
Neden böyle oldu?
Discourse, emoji ve GIF dosyalarını herhangi bir mesaja eklemeye izin verir.
Bir dosya bir bağlamdan diğerine taşındığında (örneğin kişisel sohbetten herkese açık gönderiye) sistem rastgele bir SHA‑1 hash’iyle yeni bir kopya oluşturur. Bu, içeriği aynı olsa bile Discourse’un onu yeni bir nesne olarak görmesine yol açar.
Dolayısıyla tek bir GIF, binlerce mesajda ve kişisel sohbette ortaya çıkabilir – her seferinde ayrı bir dosya üretilir. Sonuçta 246 173 kopya ext4 sınırını aşmış ve sistem yeni dosyalar oluşturmaya başlamış, bu da “kayıp” 181 000 yedekleme dosyasına yol açmıştır.
2. İlk çözüm – hash toplama
Discourse, sorunu çözmek için öncelikle SHA‑1’e göre yüklemeleri gruplayarak denedi:
1. Yedeklenirken tüm dosyalar aynı hash’e sahip gruplara ayrılır.
2. Her grubun yalnızca ilk kopyası indirilir.
3. Diğerleri için sabit bağlantılar oluşturulur.
Bu şık görünüyordu – ancak ext4’ün bağlantı sayısı sınırını hesaba katmadı. Sınır aşıldığında sistem otomatik olarak yeni dosyalar oluşturmaya başladı ve yedekleme boyutu hızla arttı.
3. Yeni çözüm – EMLINK hatasında “geçiş”
Discourse, daha esnek bir strateji geliştirdi:
1. Normalde olduğu gibi dosyaya sabit bağlantı oluşturulur.
2. Dosya sistemi EMLINK hatası (bağlantı sınırı aşıldı) döndürürse, sonraki kopya “ana” dosya olur.
3. Bundan sonra yeni bağlantılar bu yeni ana sürüme yönlendirilir.
Böylece her sınır aşımında sistem yeni bir “ebeveyn” dosyaya geçer ve hatasız çalışmaya devam eder. Bu çözüm herhangi bir dosya sistemi ile uyumludur ve ek yapılandırma gerektirmez.
4. Sonuçlar ve çıkarımlar
- Popüler bir GIF (Friends’tan Rachel’in dansı) yedekleme boyutunu 377 GB’ye çıkarmaya yol açtı.
- ext4’ün ~65 000 sabit bağlantı sınırı kritik bir faktördü.
- İlk hash toplama çözümü dosya sınırlamalarını göz önünde bulundurmadığı için veri kaybına neden oldu.
- EMLINK hatasında “geçiş” stratejisi, çok sayıda kopyayı düzgün yönetir ve yedekleme verimliliğini korur.
> *“Şimdi Jennifer Aniston’un altyapıyı stres testi yapabileceğini biliyoruz,”* — Discourse, blogunda alaycı bir şekilde belirtti.
Yorumlar (0)
Düşüncenizi paylaşın — lütfen kibar olun ve konu dışına çıkmayın.
Yorum yapmak için giriş yapın