
Kullanıcı bir video yükledi. Sunucu onu dönüştürmeye başladı — ve o sırada siteye giren herkes yavaşlamayla karşılaştı.
Bu yazı, ağır medya işlerinin sunucu üzerindeki etkisini ve nasıl kontrol altına alınacağını ele alıyor.
Neden Sorun Yaratır?
Medya işleme, tipik web isteklerinden farklı bir kaynak profiline sahiptir:
| Normal istek | Medya işleme |
|---|---|
| Milisaniyeler sürer | Dakikalar sürebilir |
| Az bellek kullanır | Yüzlerce megabayt |
| CPU'yu kısa süre meşgul eder | Tüm çekirdekleri doldurabilir |
| Öngörülebilir | Dosyaya göre değişken |
Son satır planlamayı zorlaştırır: aynı boyuttaki iki video, çözünürlük ve kodlama farkı nedeniyle çok farklı sürelerde işlenebilir.
Bu yüzden "ortalama süre" üzerinden kapasite planlaması yapmak yanıltıcıdır — en kötü durumu hesaba katmanız gerekir.
Temel Kural: Web İsteğinden Ayırın
En önemli mimari karar budur. Ağır işi web isteği içinde yapmanın sonuçları:
- İstek zaman aşımına uğrar. Kullanıcı hata görür, iş yarım kalır.
- Web sunucusu süreci kilitlenir. Diğer ziyaretçilere yer kalmaz.
- Kullanıcı sayfayı kapatırsa iş iptal olur.
- Yeniden deneme mümkün olmaz. Hata durumunda baştan başlanır.
Doğru yapı ayrıştırmadır: web isteği dosyayı kabul eder, kuyruğa bir iş bırakır ve hemen yanıt döner. İşleme arka planda ayrı bir süreç tarafından yapılır.
Kullanıcıya "işleniyor" durumu gösterilir, tamamlandığında bildirim verilir. Bu, hem kullanıcı deneyimi hem sunucu kararlılığı açısından tek doğru yaklaşımdır.
Kaynak Sınırlaması
Arka plana taşımak tek başına yetmez — işlemenin sunucuyu tüketmesini de engellemek gerekir:
- Eşzamanlı iş sayısını sınırlayın. Aynı anda kaç dönüştürme çalışsın?
- Çekirdek kullanımını kısıtlayın. Tüm çekirdekleri almasın.
- Süreç önceliğini düşürün. Web trafiği öncelikli kalsın.
- Bellek tavanı koyun. Aşarsa süreç sonlandırılsın.
- Zaman sınırı belirleyin. Takılan iş sonsuza kadar çalışmasın.
İkinci madde çoğu araçta doğrudan desteklenir ve kritik bir korumadır: medya araçları varsayılan olarak mevcut tüm çekirdekleri kullanmaya çalışır ve bu, sitenizin yanıt vermez hâle gelmesi demektir.
Üçüncü madde ise basit ama etkilidir. İşletim sistemi düzeyinde önceliği düşürülen bir süreç, CPU rekabetinde web sunucusuna yol verir.
Donanım Boyutlandırma
Medya işleyen bir sistemde kaynak dengesi farklıdır:
- Çekirdek sayısı önemlidir. Video kodlama paralelleşir.
- Bellek geniş olmalıdır. Yüksek çözünürlük bellek ister.
- Disk hızı önemlidir. Geçici dosyalar yoğun okunup yazılır.
- Geçici alan bol olmalıdır. Ara dosyalar büyük yer kaplar.
Dördüncü madde sık gözden kaçar ve ani kesintilere yol açar: bir video dönüştürme işlemi, kaynak dosyanın birkaç katı geçici alan tüketebilir.
Kaynakları ihtiyaca göre ayarlayabildiğiniz bir VDS sunucu kiralama yapısında, medya işleme yükü arttıkça çekirdek ve bellek eklemek mümkündür; paylaşımlı ortamlarda bu esneklik bulunmaz.
Görsel İşlemede Pratikler
Görseller videoya göre hafiftir ama hacim yüksektir:
- Boyut varyantlarını önceden üretin. Her istekte yeniden boyutlandırmayın.
- Üretilen varyantları önbelleğe alın.
- Beyan edilen boyutlara sınır koyun. Devasa boyut beyanı belleği tüketir.
- Modern biçimleri değerlendirin. Boyut kazancı ciddi olabilir.
- Üstveriyi temizleyin. Konum bilgisi sızabilir.
Beşinci madde bir gizlilik önlemidir ve sıkça atlanır: telefonla çekilmiş bir fotoğraf, çekildiği yerin koordinatlarını taşır ve bunu olduğu gibi yayımlamak kullanıcı bilgisini ifşa eder.
Birinci madde ise en büyük performans kazancını sağlar. Her sayfa görüntülemede yeniden boyutlandırma yapan sistemler, sabit bir CPU yükü taşır — oysa varyantlar bir kez üretilip saklanabilir.
Kuyruk Yapısı
Arka plan işleme için pratik bir düzen:
| Bileşen | Görevi |
|---|---|
| İş kaydı | Ne işlenecek, hangi durumda |
| İşçi süreç | Kuyruktan alıp işler |
| Durum takibi | Bekliyor, işleniyor, bitti, hata |
| Yeniden deneme | Geçici hatalar için |
| Hata kuyruğu | Sürekli başarısız işler |
Beşinci satır kuyruğun tıkanmasını önler: belirli sayıda denemeden sonra başarısız olan iş ayrı bir yere alınmalıdır — aksi hâlde bozuk bir dosya kuyruğu sonsuza kadar meşgul eder.
Dördüncü satırda ayrım yapmak gerekir: geçici hatalar (disk dolu, bellek yetersiz) yeniden denenmelidir; kalıcı hatalar (bozuk dosya, desteklenmeyen biçim) denenmemelidir.
Dışarıya Taşıma Seçeneği
Medya işleme her zaman kendi sunucunuzda yapılmak zorunda değildir:
- Ayrı bir işleme sunucusu — web sunucusunu tamamen korur.
- Dış servis kullanımı — bakım yükü kalkar, maliyet değişkendir.
- İstemci tarafında ön işleme — yükleme öncesi küçültme.
Üçüncü seçenek en az düşünülen ama en etkili olanıdır: tarayıcıda küçültülmüş bir görsel, hem bant genişliği hem sunucu yükü tasarrufu sağlar. Yine de sunucu tarafı doğrulama her zaman gereklidir.
Sonuç
Medya işlemede tek kritik mimari karar, ağır işi web isteğinden ayırmaktır: istek dosyayı kabul edip kuyruğa bırakmalı ve hemen yanıt dönmelidir. Arka plana taşımak da tek başına yetmez — medya araçları varsayılan olarak tüm çekirdekleri kullanmaya çalışır, bu yüzden çekirdek kullanımını kısıtlayıp süreç önceliğini düşürün. Geçici disk alanını da unutmayın: bir dönüştürme işlemi kaynak dosyanın birkaç katı geçici alan tüketebilir. Görsellerde ise varyantları önceden üretip saklamak en büyük kazancı sağlar.
Sıkça Sorulan Sorular (SSS)
İşlemeyi neden web isteğinden ayırmalıyım?
Çünkü uzun süren iş, web sunucusu sürecini kilitler ve diğer ziyaretçilere yer kalmaz. Ayrıca istek zaman aşımına uğrarsa iş yarım kalır ve kullanıcı sayfayı kapattığında iptal olur. Kuyruk yapısında iş, kullanıcıdan bağımsız olarak tamamlanır.
Kaç çekirdek ayırmalıyım?
Tüm çekirdekleri değil. Medya araçları varsayılan olarak hepsini kullanmaya çalışır ve bu sitenizi yanıt veremez hâle getirir. Çekirdek sayısını açıkça sınırlayın ve işleme süreçlerinin önceliğini düşürün ki web trafiği öncelikli kalsın.
Disk alanını nasıl planlamalıyım?
Kaynak ve hedef dosyanın toplamından fazlasını hesaplayın — dönüştürme sırasında oluşan ara dosyalar kaynak boyutunun birkaç katına ulaşabilir. Geçici alanı ayrı bir bölümde tutmak, dolduğunda sistemin geri kalanını korur.
Sürekli başarısız olan işleri ne yapmalıyım?
Belirli sayıda denemeden sonra ayrı bir hata kuyruğuna alın. Aksi hâlde bozuk tek bir dosya kuyruğu sonsuza kadar meşgul eder. Geçici hataları (disk dolu, bellek yetersiz) yeniden deneyin; kalıcı hataları (bozuk dosya, desteklenmeyen biçim) denemeyin.