- 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.