Vaka Çalışması

Çok şirketli oynatma raporunun performansını iyileştirmek

Problem

Global rapor, birden fazla şirketin yüzlerce cihazından gelen oynatma ve hata kayıtlarını tek ekranda topluyor. Canlıda rapor ağırlaştı: tüm şirketler ve tam gün seçildiğinde kayıt listesi 44–94 saniye sürüyordu. Aynı sorgu tek şirkete daraltılınca anında dönüyordu.

İncelediğimizde birkaç sorun üst üste biniyordu:

  • Filtreler veritabanında değil, veri çekildikten sonra uygulamada uygulanıyordu.
  • Bu sorgu için uygun bir index yoktu.
  • Her şirket ve her cihaz için ayrı ayrı sorgu atılıyordu.
  • Aynı ağır hesap, farklı rapor kırılımları için defalarca tekrarlanıyordu.

Yaklaşım

  • Filtreleri veritabanına taşıdık ve sorguya uygun index ekledik.
  • Aynı anda gelen aynı hesap isteklerini tek hesapta birleştirdik.
  • Cihaz bazlı sorguları kontrollü şekilde paralel çalıştırdık; bu bölüm yaklaşık 8 kat hızlandı.
  • Geçmiş günlerin sonuçlarını önbelleğe aldık; bugünün verisi her zaman canlı hesaplanıyor.

Sonuç

Cihaz bazlı sorguların çalıştığı bölüm yaklaşık 8 kat hızlandı. Bu ölçüm raporun tamamının yanıt süresini değil, iyileştirilen sorgu bölümünü kapsıyor. Geçmiş günler için önbellek kullanılarak aynı hesapların yeniden yapılması azaltıldı.

Öğrenilenler

Durum raporu için eklediğim yeni bir API uç noktasının ilk sürümü, istatistikleri ham kayıtlardan yeniden hesaplıyordu; rapor 47 saniyeye çıktı. Doğrusu, zaten hazırlanmış özetleri okumaktı. Her yavaşlığın çözümü yeni bir hesap değil; bazen yalnızca doğru kaynaktan okumak.

Benim katkım

Performans analizini, iyileştirme planını ve düzeltmelerin tamamını ben yaptım.

Teknoloji

  • .NET 8
  • MongoDB
  • Redis