Merencanakan kapasitas secara ilmiah, bukan menebak: load forecasting dari metrik, strategi headroom yang sehat, perbedaan vertical vs horizontal scaling, dan auto-scaling sebagai pengaman bukan pengganti perencanaan — lengkap dengan rencana kapasitas dan scaling untuk satu service

Setelah di episode 7 kita belajar menangani insiden, kini kita beralih ke kemampuan yang membuat insiden tidak perlu terjadi: capacity planning. Kegagalan kapasitas punya ciri khas yang menipu: sistem tidak error di satu titik, melainkan melambat perlahan di bawah beban yang terus tumbuh — dan saat kita sadar, sudah telat.
Ini keterampilan yang membedakan SRE sejati dari sekadar "orang yang memantau CPU". Capacity planning bukan tentang menambah mesin saat dashboard merah, melainkan menjawab pertanyaan di waktu tenang: berapa kapasitas yang kita butuhkan 3 bulan lagi? Di mana titik patahnya? Berapa banyak headroom yang kita mau bayar? Episode ini membangun jawaban sistematisnya.
Sebelum memprediksi, kenali dulu bentuk beban. Beberapa pola dasar:
| Pola | Contoh | Implikasi |
|---|---|---|
| Growth linier | Pengguna naik 5% per bulan | Forecast model linier/eksponensial |
| Seasonality | Traffic naik malam hari & akhir pekan | Scaling harian/mingguan |
| Event-driven | Flash sale, rilis fitur besar | Kapasitas sengaja di-over-provision |
| Spiky | Viral, crawler tak terduga | Auto-scaling + rate limiting |
Teknik paling sederhana yang tetap berguna: ambil metrik penggunaan (CPU, koneksi DB, bandwidth) dalam 90 hari, hitung tren, proyeksikan ke 90 hari berikutnya. Contoh kasar dengan PromQL:
predict_linear(node_cpu_seconds_total[2h], 14*24*3600)predict_linear menghitung regresi linier dari data 2 jam lalu memproyeksikannya 14 hari ke depan. Kasar, tapi cukup untuk menjawab "kapan kita kehabisan?". Untuk akurasi lebih, gabungkan dengan data seasonality (hari vs malam, hari kerja vs libur).
Note
Forecast adalah probabilitas, bukan kepastian. Semakin jauh ke depan, semakin lebar ketidakpastiannya. Karena itu kapasitas direncanakan dalam kuartal (perencanaan) dan dikoreksi tiap bulan (review), bukan dibuat sekali lalu dilupakan.
Headroom adalah kelebihan kapasitas di atas kebutuhan — dan ia punya harga. Menentukan jumlah headroom berarti menjawab: berapa cepat kita bisa menambah kapasitas saat dibutuhkan?
Rumus intuitifnya:
Praktik yang sehat: definisikan target utilization per resource. Contoh kebijakan:
| Resource | Target utilization | Catatan |
|---|---|---|
| CPU | 60-70% | Ruang untuk burst & failover |
| Memory | 70-80% | Perhatikan OOM, bukan hanya angka rata-rata |
| Disk | 70% | Alert + otomasi pembersihan sebelum 90% |
| Connections DB | 70% | Cadangan untuk spike dan query berat |
Target ini bukan "berapa yang dipakai", melainkan "berapa yang tersisa sebelum berbahaya" — perbedaan sudut pandang yang menandai SRE.
Menambah resource satu mesin: CPU, RAM, disk. Kelebihan: sederhana, tidak mengubah arsitektur, dan beberapa workload (database single-node) memang butuh ini. Kekurangan: ada batas fisik mesin, titik tunggal kegagalan tetap ada, dan menambah mesin besar sering lebih mahal per unit daripada menambah banyak mesin kecil.
Menambah jumlah instance: dari 2 menjadi 5 pod/replica. Kelebihan: skala hampir tak terbatas, resilience (satu node mati tidak melumpuhkan), dan pembelian fleksibel di cloud. Kekurangan: butuh desain stateless (atau sesi bersama di Redis/DB), dan setiap lapis baru (load balancer, koneksi DB) punya batasnya sendiri.
Auto-scaling (HPA di Kubernetes, ASG di cloud) menjawab variabilitas beban jangka pendek. Kesalahan paling umum: mengandalkannya sebagai perencana utama, sehingga kapasitas di-budget "sesedikit mungkin" dan cluster dibiarkan mengejar ekor beban.
Kenyataannya, auto-scaling selalu tertinggal sedikit (butuh waktu untuk menambah instance) dan sering bereaksi terlambat pada ledakan mendadak. Kombinasi yang benar:
Warning
Hati-hati dengan thrashing: HPA yang naik-turun terlalu cepat karena ambang sensitif, atau scaling yang justru memicu lebih banyak beban (setiap pod baru menambah koneksi ke DB hingga DB jadi bottleneck). Selalu cek metrik downstream saat men-scaling upstream — scaling yang tidak seimbang adalah sumber insiden klasik.
Terapkan pada service demo:
predict_linear 14 hari, catat kapan utilization menyentuh target 70%.apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: demo-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: demo
minReplicas: 3
maxReplicas: 12
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 65Tip
Uji rencana kalian dengan load test (tool seperti k6, dibahas di episode 15): naikkan beban bertahap sampai satu resource menyentuh target utilization, dan amati apakah auto-scaling mengejar tanpa meledak. Hasil uji ini adalah bahan terbaik untuk merevisi angka baseline.
Pada episode 8 ini, kalian telah mengubah capacity planning dari tebakan menjadi proses.
Inti yang harus dibawa pulang:
predict_linear atau model sederhana.Di episode 9 selanjutnya, kita akan membereskan musuh paling diam-diam dari SRE: toil — cara mengidentifikasi pekerjaan manual yang menggerogoti tim, mengotomasinya secara bertahap, dan menjaga agar tim tidak kembali tenggelam. Sampai jumpa di episode 9!