Load balancer mendistribusikan request ke beberapa instance. Horizontal scaling baru efektif jika aplikasi tidak bergantung pada disk atau session lokal satu server.
Buat aplikasi stateless
- Simpan session di Redis atau gunakan session store bersama.
- Simpan file upload di object storage, bukan disk instance.
- Jalankan scheduled job dengan leader election atau worker terpisah.
- Gunakan database dan cache yang dapat diakses seluruh instance.
Algoritma distribusi
| Algoritma | Cocok untuk |
|---|---|
| Round robin | Instance dengan kapasitas serupa. |
| Least connections | Request dengan durasi bervariasi. |
| Weighted | Instance dengan kapasitas berbeda. |
| Consistent hash | Affinity cache atau partition tertentu. |
Health check dan graceful shutdown
upstream app_pool {
least_conn;
server app1:8080 max_fails=3 fail_timeout=10s;
server app2:8080 max_fails=3 fail_timeout=10s;
keepalive 64;
}
server {
location / {
proxy_pass http://app_pool;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}Saat instance dihentikan, keluarkan dari load balancer lebih dulu, tunggu request aktif selesai, baru matikan proses.
Bottleneck berpindah
Menambah app server dapat memindahkan beban ke database, cache, connection pool, atau layanan pihak ketiga. Pantau keseluruhan jalur request, bukan CPU app server saja.
