Menggunakan data performance test untuk capacity planning: model kapasitas, forecasting pertumbuhan, resource budgeting, right-sizing infrastruktur, dan menghubungkan capacity dengan SLO dan cost optimization.

Setelah di episode 10 kita memahami analysis dan bottleneck detection, kini saatnya menggunakan data itu untuk tujuan yang lebih strategis: capacity planning. Capacity planning menjawab pertanyaan: "Berapa banyak infrastruktur yang kita butuhkan untuk melayani user dengan performa yang dijanjikan?" — dan menjawabnya dengan data, bukan tebakan.
Capacity planning adalah jembatan antara performance testing dan business decision-making. Data dari load test memberitahu kalian berapa banyak server yang dibutuhkan; forecasting memberitahu kapan kalian perlu menambah. Tanpa capacity planning, organisasi berakhir dengan dua ekstrem: over-provisioning (membuang uang) atau under-provisioning (membuang user).
Capacity model adalah representasi matematis dari hubungan antara beban (users, requests) dan resource (CPU, memory, bandwidth). Model ini membantu kalian memprediksi berapa resource yang dibutuhkan untuk beban tertentu.
Required Capacity = Peak Load × Safety Margin × Growth Factor
Contoh:
- Peak Load: 1000 RPS
- Safety Margin: 1.5x (50% headroom)
- Growth Factor: 1.3x (30% pertumbuhan tahun depan)
- Required Capacity: 1000 × 1.5 × 1.3 = 1950 RPSCapacity planning harus mempertimbangkan semua dimensi resource, bukan hanya CPU:
| Resource | Metrik | Kapan Jadi Bottleneck |
|---|---|---|
| CPU | Core usage, utilization % | Compute-heavy tasks |
| Memory | RSS, heap usage | Caching, large datasets |
| Disk I/O | IOPS, throughput MB/s | Database, logging |
| Network | Bandwidth Mbps, connections | API gateway, CDN |
| Database | Connections, query time | Concurrent transactions |
| License | Concurrent users | Commercial software |
# Contoh forecasting sederhana
current_rps = 500
monthly_growth = 0.05 # 5% per bulan
months_ahead = 12
forecasted_rps = current_rps * (1 + monthly_growth) ** months_ahead
print(f"Forecasted RPS dalam {months_ahead} bulan: {forecasted_rps:.0f}")
# Output: Forecasted RPS dalam 12 bulan: 898Safety margin adalah buffer di atas capacity yang dihitung untuk mengakomodasi:
| Masalah | Dampak | Solusi |
|---|---|---|
| Over-provisioning | Biaya infra membengkak | Capacity planning berbasis data |
| Under-provisioning | Latency tinggi, error rate naik | Load testing sebelum scaling |
Auto-scaling menghubungkan capacity planning dengan execution. Berdasarkan data load test, kalian bisa menentukan scaling policies:
# Contoh auto-scaling policy (Kubernetes HPA)
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 3
maxReplicas: 20
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Gunakan data load test untuk menentukan ukuran optimal:
Contoh:
- 1 instance mampu 200 RPS dengan CPU 70%
- Target: 1000 RPS
- Required instances: 1000 / 200 = 5 instances
- Dengan safety margin 1.5x: 5 × 1.5 = 8 instancesCapacity planning harus mempertimbangkan SLO. Jika SLO mensyaratkan p95 latency ≤ 300ms, maka capacity harus cukup untuk mencapai SLO tersebut di bawah peak load.
Untuk mencapai p95 ≤ 300ms di 1000 RPS:
- Diperlukan 8 instances (dari load test)
- Dengan 3 instances: p95 = 800ms (melanggar SLO)
- Dengan 8 instances: p95 = 200ms (memenuhi SLO)Capacity planning yang baik juga mengoptimasi biaya:
Capacity planning bukan one-time exercise. Setelah deployment, kalian perlu memantau apakah capacity yang dihitung benar:
# Prometheus query untuk memantau capacity utilization
# CPU utilization per instance
avg(rate(process_cpu_seconds_total[5m])) by (instance)
# Memory utilization per instance
process_resident_memory_bytes / machine_memory_bytes * 100
# Connection pool utilization
db_connections_active / db_connections_max * 100Di episode 11 ini kalian telah memahami capacity planning:
Di episode 12 selanjutnya, kita akan membahas Test Data & Scenarios — bagaimana menyiapkan data yang realistis dan skenario yang mencerminkan traffic production untuk load testing yang akurat. Siapkan dataset kalian!