Memahami vertical scaling (upgrade hardware) vs horizontal scaling (tambah mesin), load balancing algorithm (round-robin, least connections, health check), serta perbandingan L4 vs L7 load balancer untuk arsitektur production

Setelah di episode 1 kita memahami distributed system, CAP theorem, dan identifikasi SPOF, pada episode ini kita masuk ke pertanyaan paling fundamental dalam scalability: horizontal atau vertical? Keputusan ini menentukan arsitektur seluruh sistem kalian — dari infrastruktur, biaya, hingga cara menangani kegagalan.
Bayangkan aplikasi kalian mulai melambat karena traffic meningkat. Apa yang kalian lakukan? Jawaban pertama kebanyakan engineer adalah "upgrade server." Tapi apakah itu selalu solusi terbaik? Di episode ini kita bedah keduanya secara mendalam.
Vertical scaling artinya upgrade hardware pada mesin yang sama: tambah CPU, RAM, atau storage.
Horizontal scaling artinya menambah lebih banyak mesin di belakang load balancer.
Untuk bisa horizontal scale, aplikasi harus:
Load balancer bertugas mendistribusikan request ke backend server. Beberapa algoritma utama:
Setiap request dikirim ke server berikutnya secara bergiliran.
Request 1 → Server A
Request 2 → Server B
Request 3 → Server C
Request 4 → Server A (balik ke awal)Kelebihan: sederhana, adil. Kekurangan: tidak mempertimbangkan beban aktual server.
Request dikirim ke server dengan paling sedikit koneksi aktif.
Kelebihan: lebih adil untuk beban aktual. Kekurangan: butuh tracking koneksi aktif, overhead lebih tinggi.
Hash IP client menentukan server tujuan — client yang sama selalu ke server yang sama.
Kelebihan: sticky session tanpa cookie. Kekurangan: uneven distribution jika hash tidak uniform.
Round-robin dengan bobot: server lebih kuat menerima lebih banyak request.
Server A (weight 3): menerima 3 dari 6 request
Server B (weight 2): menerima 2 dari 6 request
Server C (weight 1): menerima 1 dari 6 requestLoad balancer secara berkala mengecek apakah server backend hidup. Jika server gagal health check, traffic dialihkan ke server lain.
# HTTP health check
curl -f http://server:8080/health || echo "Server down"
# TCP health check
nc -zv server 8080| Aspek | L4 (Transport) | L7 (Application) |
|---|---|---|
| Layer | TCP/UDP | HTTP/HTTPS |
| Informasi | IP, port, protocol | Full HTTP request (header, body, URL) |
| Routing | Berdasarkan IP + port | Berdasarkan URL, header, cookie |
| Performance | Lebih cepat (kurang inspeksi) | Lebih lambat (deep inspection) |
| Fitur | Basic load balancing | SSL termination, path-based routing, caching |
| Contoh | AWS NLB, HAProxy (mode TCP) | AWS ALB, NGINX, HAProxy (mode HTTP) |
/api/* ke service A, /web/* ke service B).Desain load balancing untuk 3 server API:
Semua server stateless — session disimpan di Redis. Load balancer bisa pakai round-robin atau least connections.
Client yang sama selalu ke server yang sama. Problem: jika server mati, semua session di server itu hilang.
| Aspek | Stateless | Sticky Session |
|---|---|---|
| Fault tolerance | Tinggi (server mati tidak mempengaruhi) | Rendah (session hilang saat server mati) |
| Scalability | Mudah (tambah server tanpa constraint) | Sulit (distribusi tidak merata) |
| Complexity | Butuh session store external | Sederhana |
| Recommendation | Production systems | Legacy systems yang tidak bisa diubah |
Tip
Untuk system design interview, selalu rekomendasikan stateless architecture dengan session store external. Ini menunjukkan pemahaman tentang fault tolerance dan scalability.
Inti yang harus dibawa pulang:
Di episode 3 selanjutnya kita akan membahas caching strategies — browser cache, CDN edge cache, application cache (Redis/Memcached), database query cache, serta pola cache-aside, read-through, write-through, dan write-behind. Pastikan konsep scalability sudah dipahami, karena caching adalah salah satu teknik paling powerful untuk meningkatkan performa!