4 poin oleh GN⁺ 2025-12-09 | Belum ada komentar. | Bagikan ke WhatsApp
  • Selama proses migrasi codebase dari Scala 2.13 ke Scala 3, terjadi penurunan performa yang tidak terduga
  • Pada pengujian awal dan lingkungan deployment, semua metrik terlihat normal, namun beberapa jam kemudian lag Kafka meningkat
  • Hasil load test menunjukkan adanya penurunan throughput yang tajam saat memproses pesan yang terperinci
  • Melalui analisis async-profiler, terungkap bahwa penyebabnya adalah bug inefisiensi evaluasi chain pada library Quicklens
  • Setelah library diperbarui, performa pulih, dan ditekankan perlunya kewaspadaan terhadap perbedaan perilaku library antar versi Scala

Proses Migrasi Layanan

  • Layanan yang ada sebelumnya dipindahkan dari Scala 2.13 ke Scala 3.7.3
    • Ini adalah layanan yang berfokus pada pengumpulan data tanpa menggunakan macro, dengan performa sebagai aspek penting
    • Setelah menerapkan perubahan pada dependensi, opsi compiler, tipe, dan sintaks, kompilasi berhasil
  • Di lingkungan pengujian dan deployment bertahap, log dan metrik semuanya tampak normal
    • Metrik di tingkat infrastruktur, JVM, dan aplikasi semuanya dikonfirmasi dalam kondisi sehat

Penurunan Performa dengan Penyebab yang Tidak Jelas

  • Sekitar 5–6 jam setelah deployment, terjadi peningkatan lag Kafka
    • Bahkan ketika tidak ada lonjakan data, throughput per instance menurun
    • Setelah rollback, throughput segera pulih, yang mengonfirmasi bahwa perubahan kode adalah penyebabnya

Analisis Performa dan Pelacakan Penyebab

  • Dalam load test, pada awalnya regresi performa tidak berhasil direproduksi
    • Penurunan throughput yang tajam hanya terjadi pada payload yang terperinci dan heterogen
  • Library dependensi (serialisasi, DB SDK, image Docker, library konfigurasi, dan lainnya) dikembalikan satu per satu untuk diuji, tetapi tidak ada perubahan
  • Hasil profiling CPU dengan async-profiler menunjukkan bahwa,
    • Di Scala 3, penggunaan CPU oleh compiler JIT dan tahap decoding meningkat tajam
    • Di bagian atas flamegraph, pemanggilan Quicklens memakan setengah dari total waktu CPU
    • Di Scala 2.13, pemanggilan yang sama hanya berada di kisaran 0,5%

Akar Penyebab Masalah

  • Bug inefisiensi evaluasi chain pada library Quicklens muncul di Scala 3
    • Perbaikan terkait telah diterapkan dalam GitHub PR #115
    • Setelah library diperbarui, perbedaan performa antara Scala 3 dan 2.13 pun hilang

Pelajaran dan Rekomendasi

  • Ketergantungan library pada metaprogramming dapat menyebabkan perbedaan performa antar versi Scala
  • Meskipun migrasi selesai dengan normal, hotspot dan titik bottleneck tetap harus dibenchmark
  • Untuk layanan yang sensitif terhadap performa, alih-alih berasumsi “berjalan dengan baik”, validasi berbasis pengukuran nyata itu wajib
  • Diperlukan pemeriksaan awal untuk mencegah situasi di mana benchmark, bukan kode, yang mengungkap bottleneck

Belum ada komentar.

Belum ada komentar.