Capacity Planning, Forecasting, and Distributed Load Testing
Capacity Planning ensures that systems have sufficient compute, memory, disk I/O, and network bandwidth to meet expected demand without over-provisioning infrastructure costs. This guide covers growth forecasting models, stress testing, and running distributed load tests with k6 and Locust.
⚡ Quick Dive
Load Testing Types & Objectives
| Test Type | Traffic Profile | Primary Objective |
|---|---|---|
| Baseline / Smoke | Minimal constant load (5-10 VUs) | Verify script functionality and system sanity |
| Load Test | Normal expected peak load for 1 hour | Validate latency percentiles (p95/p99) under SLA |
| Stress Test | Step-up traffic until system breaks | Identify exact breaking point and failure modes |
| Spike Test | Instantaneous 10x traffic jump | Verify auto-scaling responsiveness and buffer queues |
| Soak / Endurance | High sustained load for 24-48 hours | Detect memory leaks and resource exhaustion |
📖 Extended Guide
1. Modern Distributed Load Testing with k6
// load-test.js
import http from 'k6/http';
import { check, sleep } from 'k6';
export const options = {
stages: [
{ duration: '2m', target: 100 }, // Ramp-up to 100 users
{ duration: '5m', target: 100 }, // Stay at 100 users
{ duration: '2m', target: 500 }, // Spike to 500 users
{ duration: '2m', target: 0 }, // Ramp-down
],
thresholds: {
http_req_duration: ['p(99)<200'], // 99% of requests must complete under 200ms
http_req_failed: ['rate<0.01'], // Error rate must be under 1%
},
};
export default function () {
const res = http.get('https://api.example.com/products');
check(res, { 'status is 200': (r) => r.status === 200 });
sleep(1);
}