For the complete documentation index, see llms.txt. This page is also available as Markdown.

Load Testing

πŸ“‚ Kode Lengkap Bab Ini: Seluruh kode yang dibahas di bab ini tersedia di GitHub:

πŸ”— github.com/jacky-htg/workshop/tree/main/load-testing

1. Konsep dasar

Apa itu Load Testing?

Load testing adalah praktik mensimulasikan lalu lintas pengguna (traffic) ke sistem untuk mengukur performa dan stabilitas aplikasi di bawah beban tertentu. Tujuannya adalah memastikan aplikasi dapat menangani jumlah pengguna yang diharapkan tanpa degradation performa yang signifikan.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  LOAD TESTING                                             β”‚
β”‚                                                           β”‚
β”‚  "Berapa banyak pengguna yang bisa dihandle server        β”‚
β”‚   sebelum response time menjadi tidak dapat diterima?"    β”‚
β”‚                                                           β”‚
β”‚  Contoh:                                                  β”‚
β”‚  βœ… 10 user β†’ response time 150ms                         β”‚
β”‚  βœ… 50 user β†’ response time 200ms                         β”‚
β”‚  ⚠️  100 user β†’ response time 500ms (threshold!)          β”‚
β”‚  ❌ 150 user β†’ response time 1.5s (overload!)             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Mengapa Penting?

Manfaat
Penjelasan
Dampak Bisnis

Mencegah Outage

Mengetahui batas kapasitas sebelum server down

⚠️ Downtime = Loss of revenue

Capacity Planning

Menentukan kapan perlu scaling

πŸ’° Efisiensi biaya infrastruktur

User Experience

Memastikan response time tetap cepat

😊 Retensi user meningkat

Confidence Deploy

Mengetahui impact perubahan kode

πŸš€ Deploy lebih aman

SLA Compliance

Memastikan meeting Service Level Agreement

πŸ“‹ Kepuasan pelanggan

Contoh Kasus :

Jenis-jenis Load Test

Jenis
Tujuan
Contoh Skenario
Durasi

Baseline

Mengetahui performa normal

10 VU, 1 menit

Pendek (1-5 menit)

Burst

Menguji lonjakan traffic

20 β†’ 80 RPS dalam 10 detik

Sedang (5-15 menit)

Stress

Mencari titik puncak

Naik bertahap sampai overload

Sedang (10-30 menit)

Soak

Menguji stabilitas jangka panjang

50 RPS selama 1-8 jam

Panjang (1-8 jam)

Spike

Menguji lonjakan mendadak

10 β†’ 100 RPS dalam 5 detik

Pendek (5-10 menit)

Visualisasi Jenis Load Test:

Metric Penting dalam Load Testing

  1. RPS (Request Per Second)

  1. Latency / Response Time

Waktu yang dibutuhkan server untuk merespon request.

Percentile
Arti
Contoh

p50 (median)

50% request lebih cepat dari ini

178ms

p90

90% request lebih cepat dari ini

405ms

p95

95% request lebih cepat dari ini

510ms

p99

99% request lebih cepat dari ini

890ms

  • βœ… Semakin rendah β†’ semakin baik

  • ⚠️ Perhatikan p95/p99 (outlier bisa jadi indikasi masalah)

  1. Error Rate

  1. Throughput

2. Tools

k6 (Open Source)

k6 adalah tools load testing modern yang dikembangkan oleh Grafana Labs.

Instalasi k6

Alternatif Tools

Tools
Kelebihan
Kekurangan
Kapan Pakai

k6

Modern, script JS, integrasi Grafana

Kurang UI (CLI based)

Tim DevOps/Backend

JMeter

UI lengkap, banyak plugin

Berat, Java-based, script kompleks

Tim QA yang terbiasa

Gatling

Scala/Java, report bagus

Learning curve tinggi

Tim yang pakai Scala

Locust

Python-based, mudah

Kurang performant

Tim Python

Kenapa Pilih k6?

  1. βœ… Mudah dipelajari (JavaScript basic)

  2. βœ… Performa tinggi (Go-based)

  3. βœ… Cloud native (CI/CD ready)

  4. βœ… Integrasi mudah (Grafana, Prometheus, Datadog)

  5. βœ… Community besar & aktif

  6. βœ… Script portable (bisa run di mana saja)

3 Skenario Testing (Studi Kasus)

Studi Kasus

Struktur Script k6

Script Single Endpoint

Script Gabungan (3 Endpoint)

Menjalankan Test

4 Analisis Hasil

Hasil Test: all-endpoints.js (Target 75 RPS)

Interpretasi Metric

  1. Throughput / RPS

  1. Latency / Response Time

  1. Error Rate

Error rate: 0% dari 13,461 request

  • βœ… Sempurna! Tidak ada error

  • βœ… Server masih bisa memproses semua request

  1. Concurrent Users & Iterations

Threshold & Alert

Threshold yang Direkomendasikan

Alert Level

Level
Kondisi
Tindakan

🟒 OK

P95 < 400ms, Error 0%

Normal operation

🟑 Warning

P95 > 450ms atau Error > 0.5%

Investigasi, siap scaling

πŸ”΄ Critical

P95 > 500ms atau Error > 1%

Scaling segera

🚨 Emergency

P95 > 1s atau Error > 5%

Emergency response

Capacity Planning

Perbandingan 3 Skenario

Metric
Target 60 RPS
Target 75 RPS
Target 80 RPS
Analisis

RPS

63.04

74.43

74.90

Stabil di ~74 RPS

Avg RT

191.51 ms

230.45 ms

274.57 ms

Baik, mulai naik

P50

157.68 ms

178.21 ms

193.94 ms

βœ… < 200ms

P95

377.64 ms

509.94 ms

642.11 ms

❌ Melewati threshold

P99

697.33 ms

889.61 ms

1.18s

Mulai melewati

Dropped

77

54

238

Meningkat di 80 RPS

Status

βœ… Semua lolos

⚠️ P95 gagal

❌ P95 & P99 gagal

Kapasitas: ~74 RPS

Kapasitas Maksimum

5 Ekstrapolasi Staging β†’ Production

Mengapa Ekstrapolasi Sulit?

Faktor-faktor yang Mempengaruhi

  1. Database - Faktor Terbesar!

Contoh Perhitungan:

  1. Connection Pool

DATABASE CONNECTION POOL (Max: 100)

  1. Load Balancer Overhead

Jumlah Server
Overhead LB
Faktor Efisiensi

1 server

0%

1.0

2 server

5-10%

0.90-0.95

3 server

10-15%

0.85-0.90

5+ server

15-25%

0.75-0.85

  1. Session Management

Tipe
Overhead
Faktor Koreksi

Stateless (JWT)

2-5%

0.95-0.98

Stateful (Redis)

10-15%

0.85-0.90

Stateful (In-memory)

15-25%

0.75-0.85

  1. Network Bandwidth

Formula Kalkulasi Ekstrapolasi

Formula Dasar

Faktor Koreksi Lengkap

Contoh Perhitungan

Rekomendasi Kapasitas Production

Skenario
Staging
Production (Est.)
Target Aman

Service A Only

74 RPS

102 RPS

72 RPS

Dengan Service Lain

74 RPS

59 RPS

41 RPS

Conservative

74 RPS

59 RPS

41 RPS

Rekomendasi Production:

6 Rekomendasi & Action Items

Alert Configuration

Prometheus + Alertmanager

Scaling Strategy

Level 1: Vertical Scaling (Scale Up)

Kapan Pakai:

  • RPS meningkat 20-30%

  • Response time mulai naik

  • CPU > 70% atau RAM > 80%

Level 2: Horizontal Scaling (Scale Out)

Kapan Pakai:

  • RPS meningkat > 50%

  • Vertical scaling sudah maksimal

  • Perlu high availability

Level 3: Database Scaling

Kapan Pakai:

  • Database CPU > 70%

  • Connection pool hampir habis

  • Query time meningkat

Monitoring

Dashboard Grafana yang Direkomendasikan

Metric yang Harus Dimonitor

Metric
Target
Alert

RPS

< 50

> 60

P95 Response Time

< 400ms

> 450ms

Error Rate

0%

> 0.5%

CPU

< 60%

> 70%

Memory

< 70%

> 80%

DB Connections

< 60

> 80

DB Query Time

< 100ms

> 200ms

Disk Usage

< 70%

> 80%

Action Items Checklist

Immediate (Hari Ini)

Short-term (Minggu Ini)

Medium-term (Bulan Ini)

Long-term (Quarter)

Ringkasan

Yang Sudah Kita Pelajari

Topik
Poin Kunci

Konsep Dasar

Baseline, Burst, Stress, Soak, Spike

Metric Penting

RPS, Latency, Error Rate, Throughput

Tools

k6 (recommended), JMeter, Gatling, Locust

Skenario

Baseline 10 VU, Burst 75 RPS

Analisis

Interpretasi metric, Threshold, Capacity

Ekstrapolasi

DB bottleneck, Connection pool, Faktor koreksi

Rekomendasi

Alert, Scaling, Monitoring

Best Practices

  1. βœ… Mulai dengan baseline (ukur performa normal)

  2. βœ… Naikkan beban bertahap (temukan titik limit)

  3. βœ… Perhatikan p95 (bukan hanya average)

  4. βœ… 0% error rate adalah target minimal

  5. βœ… Monitor resource saat test (CPU, RAM, DB)

  6. βœ… Ekstrapolasi dengan faktor koreksi realistis

  7. βœ… Setup alert sebelum deploy ke production

  8. βœ… Regular load testing (setiap release)

  9. βœ… Simpan hasil test untuk perbandingan

  10. βœ… Libatkan tim (Dev + QA + Ops)

Last updated