Aplikasimu mulai dapat traffic. Response time mulai lambat. CPU usage tinggi terus. Apa yang harus dilakukan?
Di server VPS tradisional, scaling berarti upgrade ke server yang lebih besar (dan lebih mahal) — atau setup load balancer yang kompleks. Di Helipod, scaling semudah menggeser slider dan mengubah angka replica.
Artikel ini menjelaskan semua opsi scaling di Helipod dan kapan harus menggunakannya.
Dua Jenis Scaling
Vertical Scaling (Scale Up)
Tambah CPU dan Memory pada pod yang sudah ada. Cocok untuk aplikasi yang butuh lebih banyak resource per instance.
Horizontal Scaling (Scale Out)
Tambah jumlah replica pod yang identik. Cocok untuk menangani traffic tinggi dengan distribusi beban.
Di Helipod, keduanya tersedia dan bisa dikombinasikan.
Mengakses Settings Scaling
- Klik service di canvas dashboard
- Buka tab Settings
- Scroll ke bagian Scaling & Resources
Kamu akan melihat:
- Region & Replicas — pilih region dan jumlah replica
- Hardware Limits — slider CPU dan Memory per replica
Vertical Scaling: CPU dan Memory
CPU Slider
Range: 0.25 vCPU sampai 4 vCPU (per plan).
| Nilai | Cocok untuk |
|---|---|
| 0.25 vCPU | Side project, traffic sangat rendah |
| 0.5 vCPU | Aplikasi ringan, <50 req/menit |
| 1 vCPU | Aplikasi medium, 50–500 req/menit |
| 2 vCPU | Aplikasi traffic tinggi atau CPU-intensive |
| 4 vCPU | Heavy workload, image processing, ML inference |
Cara baca CPU di tab Metrics: CPU ditampilkan dalam millicores (m). 1000m = 1 vCPU.
Jika CPU chart kamu sering flatline di angka mendekati limit — itu tanda pod butuh CPU lebih. Jika CPU selalu di bawah 30% dari limit, kamu mungkin over-provisioned.
Memory Slider
Range: 256MB sampai 8GB (per plan).
| Nilai | Cocok untuk |
|---|---|
| 256MB | Bot sederhana, webhook handler |
| 512MB | App Laravel/Django/Flask ringan |
| 1GB | App medium dengan database connection pool |
| 2GB | App dengan banyak file processing atau caching |
| 4GB | Next.js dengan banyak SSR, atau ML model kecil |
| 8GB | ML model besar, data processing, database |
Cara baca Memory di Metrics: Ditampilkan dalam MB dengan persentase dari limit. Contoh: 325 MB · 31.0% of 1024MB limit.
Tanda butuh scale up memory:
- Memory mendekati atau menyentuh limit (>80%)
- Restarts counter naik (OOM kill)
- Memory naik terus secara linear tanpa turun (memory leak — solve di kode, bukan scale)
Cara Mengubah CPU dan Memory
- Buka Settings → Scaling & Resources
- Geser slider CPU ke nilai yang diinginkan
- Geser slider Memory ke nilai yang diinginkan
- Klik Save atau Apply Changes
- Helipod akan melakukan rolling restart untuk apply perubahan
Perubahan resource akan ter-apply langsung tanpa perlu redeploy kode.
Estimasi Biaya Setelah Scale
Ingat formula harga resource Helipod:
- CPU: Rp 300 / 0.25 vCPU / hari
- RAM: Rp 400 / 256MB / hari
Contoh kalkulasi:
| Spec | CPU Cost/hari | RAM Cost/hari | Total/hari | ~Total/bulan |
|---|---|---|---|---|
| 0.25 vCPU + 256MB | Rp 300 | Rp 400 | Rp 700 | ~Rp 21.000 |
| 0.5 vCPU + 512MB | Rp 600 | Rp 800 | Rp 1.400 | ~Rp 42.000 |
| 1 vCPU + 1GB | Rp 1.200 | Rp 1.600 | Rp 2.800 | ~Rp 84.000 |
| 2 vCPU + 2GB | Rp 2.400 | Rp 3.200 | Rp 5.600 | ~Rp 168.000 |
| 4 vCPU + 4GB | Rp 4.800 | Rp 6.400 | Rp 11.200 | ~Rp 336.000 |
Horizontal Scaling: Replicas
Replicas adalah cara menjalankan beberapa instance pod yang identik secara bersamaan, dengan traffic didistribusikan secara otomatis antar instance.
Cara Mengatur Replicas
Di Settings → Scaling & Resources → Region & Replicas, ada kontrol + dan - untuk mengatur jumlah replica.
Batas replica per plan:
| Plan | Max Replicas | Spec per Replica |
|---|---|---|
| Free | 0 (no replicas) | — |
| Mekanik | 3 | Max 2 vCPU / 2GB |
| Pilot | 10 | Max 4 vCPU / 4GB |
| Enterprise | Custom | Custom |
Kapan Pakai Replicas?
Gunakan replicas jika:
- Traffic tinggi dan satu pod tidak cukup untuk handle semua request
- Butuh high availability — jika satu pod mati, pod lain tetap melayani traffic
- Aplikasi kamu stateless (tidak menyimpan state di memory antar request)
Jangan pakai replicas jika:
- Aplikasi kamu stateful (menyimpan session di memory, tidak di database/Redis)
- Menggunakan file local yang perlu dibaca/tulis (pakai persistent volume atau object storage)
- Punya cron job atau scheduler yang tidak boleh jalan lebih dari satu instance
Stateless vs Stateful
Ini konsep penting untuk horizontal scaling.
Stateless (aman untuk replicas):
- Session disimpan di database atau Redis
- Cache disimpan di Redis
- File disimpan di object storage (S3, Spaces) atau persistent volume yang shared
- Tidak ada in-memory data yang perlu dibagi antar instance
Stateful (butuh pertimbangan extra):
- Session disimpan di memory aplikasi
- Cache in-memory yang berbeda per instance
- File yang ditulis ke disk local container
Cara bikin stateless:
Laravel:
SESSION_DRIVER=redis
CACHE_DRIVER=redis
QUEUE_CONNECTION=redis
Django:
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django_redis.cache.RedisCache',
'LOCATION': os.environ['REDIS_URL'],
}
}
Next.js — sudah stateless by default (state di client atau database).
Traffic Distribution
Helipod menggunakan round-robin load balancing antar replicas melalui Traefik. Setiap request baru dikirim ke replica berikutnya secara bergantian.
Ini berarti satu user bisa dilayani oleh replica yang berbeda di setiap request — pastikan session management sudah stateless sebelum menambah replicas.
Strategi Scaling yang Direkomendasikan
Langkah 1: Mulai Kecil
Mulai dengan spec minimum yang cukup, bukan spec maksimum. Lebih mudah scale up daripada scale down karena takut tidak cukup.
Konfigurasi starting point yang direkomendasikan:
- Simple Laravel/Django/Flask: 0.5 vCPU + 512MB
- Next.js / NestJS: 0.5 vCPU + 1GB
- Background worker: 0.25 vCPU + 256MB
- PostgreSQL: 0.5 vCPU + 512MB (untuk app kecil-medium)
Langkah 2: Monitor Selama 1 Minggu
Pantau tab Metrics selama seminggu pertama:
- CPU average usage di atas 70%? → Scale up CPU
- Memory di atas 80% limit? → Scale up Memory
- Restarts > 0? → Cek App logs, kemungkinan OOM atau crash
Langkah 3: Scale Berdasarkan Data
Jangan scale berdasarkan asumsi. Scale berdasarkan metrics actual:
CPU < 30% consistently → pertimbangkan scale DOWN (hemat biaya)
CPU 30-70% → zona nyaman
CPU > 70% consistently → scale UP atau tambah replica
Memory > 80% → scale UP memory
Restarts > 0 → investigasi root cause dulu
Langkah 4: Traffic Spike — Tambah Replicas
Untuk traffic spike yang predictable (misalnya jam 9 pagi, atau saat promo):
- Tambah replicas sebelum spike
- Pantau metrics selama spike
- Kurangi replicas setelah spike untuk hemat biaya
Scaling Database
Database adalah sering bottleneck pertama sebelum aplikasinya sendiri. Untuk PostgreSQL di Helipod:
Scale up PostgreSQL pod:
- Tambah RAM untuk connection pool dan buffer cache
- Tambah CPU untuk query-heavy workload
Optimasi sebelum scale:
-- Cek query yang lambat
SELECT query, mean_exec_time, calls
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;
-- Cek missing indexes
SELECT relname, seq_scan, idx_scan
FROM pg_stat_user_tables
WHERE seq_scan > idx_scan
ORDER BY seq_scan DESC;
Connection pooling: Untuk aplikasi dengan banyak replica, pertimbangkan PgBouncer sebagai connection pooler agar tidak terlalu banyak koneksi ke PostgreSQL:
# Deploy PgBouncer sebagai pod terpisah
# dan arahkan connection dari app ke PgBouncer, bukan langsung ke PostgreSQL
DB_HOST=pgbouncer # bukan postgres langsung
Tips Hemat Biaya saat Scaling
1. Scale down di jam sepi Jika traffic aplikasimu jelas-jelas rendah di malam hari, kurangi replicas di malam hari dan tambah lagi di pagi hari. Helipod menghitung resource per hari, jadi mengubah spec di tengah hari tetap lebih hemat.
2. Monitor overkill Pakai tab Metrics untuk identifikasi service yang over-provisioned. CPU selalu <10%? Memory selalu <30%? Turunkan spec dan hemat biaya.
3. Pisahkan background worker Jangan jalankan background worker (queue, scheduler) di pod yang sama dengan web server. Deploy sebagai pod terpisah dengan spec yang lebih kecil.
4. Gunakan helipack.json untuk hint resource:
{
"spec": {
"cpu": 0.5,
"memory": 512
}
}
Kesimpulan
Scaling di Helipod dirancang semudah mungkin — geser slider untuk vertical scaling, ubah angka untuk horizontal scaling. Tidak perlu konfigurasi load balancer, tidak perlu setup auto-scaling rules yang kompleks.
Yang terpenting: scale berdasarkan data dari tab Metrics, bukan berdasarkan asumsi. Mulai kecil, monitor, dan scale saat memang dibutuhkan.
Ingin setup database untuk aplikasimu? Baca Deploy PostgreSQL di Helipod.
Punya pertanyaan? Hubungi kami di support@helipod.id atau bergabung ke komunitas di hangar.helipod.io.