Back to Blog DevOps & Scalability

Load Balancing untuk Trafik Tinggi

Load Balancer
App 1App 2App 3

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

AlgoritmaCocok untuk
Round robinInstance dengan kapasitas serupa.
Least connectionsRequest dengan durasi bervariasi.
WeightedInstance dengan kapasitas berbeda.
Consistent hashAffinity cache atau partition tertentu.

Health check dan graceful shutdown

Nginx
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.

Share this article

Related articles

Copied