Merancang performa sebagai target terukur: capacity planning berbasis angka, performance budget per endpoint, strategi scaling dan caching yang tepat sasaran, identifikasi bottleneck dengan metode yang benar, serta membuktikan target lewat load testing sebelum production

Setelah di episode 15 solusi kalian punya strategi resilience yang diuji — RTO/RPO dari kerugian bisnis, DR bertingkat, backup yang terbukti bisa di-restorasi — kini kita bahas properti yang paling cepat terasa oleh pengguna: performa. Bedanya dengan resilience, masalah performa bukan kejadian langka melainkan tekanan harian: setiap lonjakan trafik, query berat, atau deploy buruk langsung terlihat di latensi.
Mengapa performa adalah urusan arsitektur, bukan sekadar optimasi kode? Karena 10x peningkatan jarang datang dari micro-optimization; ia datang dari keputusan desain — cache di tempat tepat, antrean di titik panas, read replica, atau CDN. Keputusan itu diambil SA jauh sebelum engineer menulis loop pertama.
Performa dimulai dari pertanyaan sederhana yang sering dijawab asal: berapa kapasitas yang kita butuhkan? Metodenya harus turun dari requirement (episode 3):
Asumsi bisnis : 500.000 tiket/bulan, peak sale 50.000 user serentak
Konversi trafik : 50 rb user x 1 request / 3 detik ~= 17.000 req/s puncak
(dengan CDN menyerap 70% statis -> origin ~5.000 req/s)
Kapasitas unit : 1 instance order-service = 250 req/s pada p95 300 ms
Kebutuhan : 5.000 / 250 = 20 instance + headroom 30% = 26 instance
Database : 5.000 req/s baca 80% -> read replica x3 + cache hit 90%Tiga pelajaran dari perhitungan itu:
Target global ("aplikasi harus cepat") tidak berguna. Yang bekerja adalah budget per jalur, diturunkan dari NFR:
| Jalur | Target p95 | Budget Breakdown |
|---|---|---|
| Cek seat map | 100 ms | Network 30 + gateway 10 + cache 10 + service 50 |
| Checkout POST | 300 ms | TLS 20 + app logic 180 + DB write 60 + commit 40 |
| Search event | 200 ms | Gateway 10 + search engine 150 + render 40 |
| Generate e-tiket | async ≤ 5 s | queue wait + processing, tidak blokir user |
Manfaat budget ini ganda: saat produksi lambat, kalian tahu jalur mana yang bocor dari anggarannya; dan saat ada proposal fitur baru di jalur panas, dampaknya pada budget bisa dinegosiasikan eksplisit (gaya pertukaran episode 11). Tanpa budget, semua diskusi performa berubah menjadi opini.
Tiga sumbu scaling yang harus dipilih sadar-sadar:
Plus dua akselerator yang mengurangi beban scaling itu sendiri:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: order-service
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: order-service
minReplicas: 6
maxReplicas: 40
metrics:
- type: PodMonitoringMetric
podMonitoringMetric:
metric:
name: http_requests_per_second
target:
type: AverageValue
averageValue: "250"Skala min-max dari perhitungan kapasitas tadi (floor 6 ≈ baseline normal, ceiling 40 mencakup peak + headroom) — angka HPA yang punya dasar, bukan default kosong 1..10.
Sistem lambat selalu punya satu-dua bottleneck dominan. Urutan penyelidikan yang efektif:
Warning
Waspadai koordinated omission pada load test sederhana: generator yang menunggu balasan mengirim request lebih sedikit saat server lambat, sehingga latensi nyata tersamar rapi. Gunakan open-model load generator yang mengikuti jadwal pengiriman, bukan menunggu respons.
Semua angka di atas bermuara ke satu ritual: load test pra-launch dengan skenario realistis:
Metrik keluarannya dibandingkan langsung dengan performance budget: p95/p99 per endpoint, error rate, saturasi tiap komponen. Temuan menjadi backlog perbaikan berprioritas — dan setelah perbaikan, uji ulang hingga budget terpenuhi. Siklus ini juga dijadwalkan ulang tiap perubahan besar arsitektur, bukan sekali seumur proyek.
Satu catatan biaya (episode 9): load test skala penuh menghasilkan tagihan egress dan compute sendiri — jadwalkan di environment yang sama dengan produksi (agar valid), tapi di window yang disepakati dan dengan tagging biaya khusus.
Inti yang harus dibawa pulang:
Di episode 17 selanjutnya kita akan membahas PoC & prototyping — cara membuktikan risiko terbesar desain dengan eksperimen kecil yang timeboxed, menyusun success criteria yang tidak bisa diperdebatkan, serta menjembatani hasil PoC menjadi keputusan arsitektur resmi. Sampai jumpa di episode 17!