4 puan yazan GN⁺ 2025-12-09 | Henüz yorum yok. | WhatsApp'ta paylaş
  • Scala 2.13'ten Scala 3'e kod tabanı geçişi sırasında beklenmedik bir performans düşüşü yaşandı
  • İlk test ve dağıtım ortamlarında tüm metrikler normaldi, ancak birkaç saat sonra Kafka gecikmesi (lag) arttı
  • Yük testlerinde mesajın ayrıntılı işlenmesi sırasında throughput düşüşü net biçimde tespit edildi
  • async-profiler analizi, sorunun Quicklens kütüphanesindeki zincir değerlendirme verimsizlik hatası olduğunu ortaya koydu
  • Kütüphane güncellemesinden sonra performans geri geldi; Scala sürümleri arasındaki kütüphane davranış farklılıklarına dikkat edilmesi gerektiği vurgulandı

Servis Geçiş Süreci

  • Mevcut servis, Scala 2.13'ten Scala 3.7.3'e taşındı
    • Makro kullanmayan veri toplama odaklı bir servis olup performansı kritik bir bileşendi
    • Bağımlılıklar, derleyici seçenekleri, tip ve sözdizimi değişiklikleri uygulandıktan sonra derleme başarılı oldu
  • Test ortamı ve kademeli dağıtım sürecinde de loglar ve metrikler normal göründü
    • Altyapı, JVM ve uygulama seviyesindeki ölçümler de sağlıklı durumdaydı

Sebebi Belirsiz Performans Düşüşü

  • Dağıtımdan yaklaşık 5-6 saat sonra Kafka lag artışı görüldü
    • Veri spike'ı olmayan durumda bile örnek başına işleme oranında düşüş
    • Geri alma sonrası işleme oranı anında toparlandı ve nedenin kod değişikliği olduğu doğrulandı

Performans Analizi ve Kök Neden Tespiti

  • Yük testlerinde başlangıçta performans regresyonu yeniden üretilemedi
    • Yalnızca mesajın parçalanması ve heterojen yüklerde işlemde throughput hızla düştü
  • Bağımlılık kütüphanelerini (seri hale getirme, DB SDK, Docker image, konfigürasyon kütüphanesi vb.) tek tek geri alarak test ettiler, ancak değişiklik görülmedi
  • async-profiler ile CPU profillemesi sonucunda
    • Scala 3'te JIT derleyicisi ve decode aşamasında CPU kullanımının ciddi biçimde artması
    • Flamegraph'ın üst satırlarında Quicklens çağrılarının toplam CPU zamanının yarısını oluşturduğu görüldü
    • Scala 2.13'te aynı çağrılar yalnızca %0.5 seviyesindeydi

Sorunun Kök Nedeni

  • Quicklens kütüphanesinde zincir değerlendirme verimsizlik hatası, Scala 3'te ortaya çıkıyordu
    • İlgili düzeltme GitHub PR #115'te yer aldı
    • Kütüphane güncellemesinden sonra Scala 3 ile 2.13 arasındaki performans farkı giderildi

Dersler ve Öneriler

  • Kütüphanelerin metaprogramlama bağımlılığı Scala sürümleri arasındaki performans farklarını tetikleyebilir
  • Geçiş tamamlanmış görünse bile, hotspot ve darboğazları benchmark etmek gerekir
  • Performansın kritik olduğu hizmetlerde “çalışıyor” varsayımı yerine ölçüme dayalı doğrulama şarttır
  • Darboğazı sadece kodla değil, benchmark'ın açığa çıkardığı senaryoları engellemek için ön kontrol gerekir

Henüz yorum yok.

Henüz yorum yok.