Belajar Performance Test Engineer - Capacity Planning
Episode 11 of 28

Belajar Performance Test Engineer - Capacity Planning

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

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

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

Model Kapasitas

Apa itu Capacity Model

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.

Formula Dasar

plaintext
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 RPS

Dimensi Resource

Capacity planning harus mempertimbangkan semua dimensi resource, bukan hanya CPU:

ResourceMetrikKapan Jadi Bottleneck
CPUCore usage, utilization %Compute-heavy tasks
MemoryRSS, heap usageCaching, large datasets
Disk I/OIOPS, throughput MB/sDatabase, logging
NetworkBandwidth Mbps, connectionsAPI gateway, CDN
DatabaseConnections, query timeConcurrent transactions
LicenseConcurrent usersCommercial software

Forecasting Pertumbuhan

Metode Forecasting

  1. Linear projection: pertumbuhan konstan per bulan/tahun
  2. Seasonal adjustment: memperhitungkan pola musiman (Black Friday, Ramadan)
  3. Event-driven: lonjakan untuk event spesifik (flash sale, product launch)
  4. Historical growth: berdasarkan pertumbuhan user actual di masa lalu
python
# 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: 898

Safety Margin

Safety margin adalah buffer di atas capacity yang dihitung untuk mengakomodasi:

  • Traffic spikes yang tidak terduga
  • Penambahan fitur baru yang menambah beban
  • Seasonal variation
  • Maintenance windows (beban bergeser ke server lain)

Right-Sizing Infrastructure

Over-Provisioning vs Under-Provisioning

MasalahDampakSolusi
Over-provisioningBiaya infra membengkakCapacity planning berbasis data
Under-provisioningLatency tinggi, error rate naikLoad testing sebelum scaling

Auto-Scaling Policies

Auto-scaling menghubungkan capacity planning dengan execution. Berdasarkan data load test, kalian bisa menentukan scaling policies:

yaml
# 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: 70

Right-Sizing dengan Data

Gunakan data load test untuk menentukan ukuran optimal:

  1. Jalankan load test dengan target load
  2. Catat resource usage: CPU, memory, connections per instance
  3. Hitung: berapa instance yang dibutuhkan untuk target load?
  4. Tambah safety margin: 20-50% headroom
plaintext
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 instances

Menghubungkan Capacity dengan SLO

Capacity planning harus mempertimbangkan SLO. Jika SLO mensyaratkan p95 latency ≤ 300ms, maka capacity harus cukup untuk mencapai SLO tersebut di bawah peak load.

Capacity = f(SLO, Load)

plaintext
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)

Cost Optimization

Capacity planning yang baik juga mengoptimasi biaya:

  • Right-size instances: jangan pakai instance besar jika kecil cukup
  • Reserved instances: untuk baseline load yang stabil
  • Spot instances: untuk peak load yang bisa di-interrupt
  • Serverless: untuk traffic yang sangat variable

Monitoring Capacity Post-Deployment

Capacity planning bukan one-time exercise. Setelah deployment, kalian perlu memantau apakah capacity yang dihitung benar:

bash
# 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 * 100

Penutup

Di episode 11 ini kalian telah memahami capacity planning:

  • Model kapasitas: formula dasar dan dimensi resource.
  • Forecasting: linear projection, seasonal adjustment, event-driven.
  • Right-sizing: over-provisioning vs under-provisioning; auto-scaling policies.
  • SLO integration: capacity = f(SLO, load); cost optimization.
  • Monitoring: capacity utilization post-deployment.

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!

Belajar Performance Test Engineer - Capacity Planning | Belajar Performance Test Engineer