Ringkasan: Ukur dulu, temukan bottleneck (biasanya database atau panggilan eksternal), lalu terapkan caching, antrean, dan batasan yang tepat.
1. Ukur yang Benar
- Pantau p50, p95, p99 latency per endpoint, bukan hanya rata-rata.
- Catat error rate, throughput, dan penggunaan CPU/memori.
- Gunakan tracing (OpenTelemetry) untuk melihat waktu tiap langkah dalam satu request.
2. Bottleneck Paling Umum
| Penyebab | Gejala | Solusi |
|---|---|---|
| Query database lambat/N+1 | Latency naik seiring data | Optimasi database |
| Panggilan API eksternal berurutan | Latency = jumlah semua panggilan | Paralelkan, cache, timeout |
| Tugas berat di dalam request | Request lama/timeout | Pindah ke antrean |
| Payload terlalu besar | Transfer lambat | Paginasi, pilih field, kompresi |
| Event loop terblokir (Node.js) | Semua request melambat | Pindah ke worker, hindari operasi sinkron berat |
3. Caching
- Cache aplikasi (Redis) untuk data yang sering dibaca dan jarang berubah, dengan TTL dan strategi invalidasi yang jelas.
- Cache HTTP (
ETag,Cache-Control) untuk respons yang bisa dibagi. - CDN untuk aset dan respons publik.
- Hati-hati dengan data pengguna: jangan cache respons personal di cache bersama.
4. Antrean untuk Tugas Berat
Kirim email, buat laporan, proses gambar/PDF, panggil AI: jangan lakukan di dalam request. Masukkan ke antrean (BullMQ/Redis atau RabbitMQ), balas cepat ke pengguna, dan proses di worker dengan retry.
5. Paginasi dan Batasan
- Selalu paginasi daftar; gunakan keyset untuk data besar.
- Batasi ukuran request dan jumlah hasil.
- Rate limiting untuk melindungi dari lonjakan dan penyalahgunaan.
- Timeout dan circuit breaker untuk dependensi eksternal agar satu layanan lambat tidak menjatuhkan semuanya.
6. Konkurensi dan Skala
Mulai dari satu server yang disetel baik; tambah instance di belakang load balancer bila perlu. Pastikan aplikasi stateless (sesi di Redis/database) sebelum scale-out.
7. Uji Beban
Gunakan k6 atau Artillery pada staging dengan pola trafik realistis. Cari titik patah sebelum pelanggan menemukannya.
Integrasi Pihak Ketiga
Dokumentasikan batas rate vendor dan terapkan retry dengan backoff (praktik integrasi API).
FAQ
Kapan perlu microservices?
Jarang untuk tahap awal. Monolit modular yang dioptimasi biasanya cukup sampai ada kebutuhan skala atau tim yang jelas.
Apakah Redis wajib?
Tidak. Gunakan bila ada data yang terbukti sering dibaca dan mahal dihitung.
Langkah selanjutnya
Minta audit performa API dengan membagikan metrik atau log endpoint paling lambat.