Least Connections #
Least connections adalah algoritma load balancing yang mengirimkan request ke server dengan jumlah koneksi aktif paling sedikit saat itu. Berbeda dengan round robin yang bergiliran tanpa memperhatikan kondisi server, least connections lebih adaptif terhadap variasi beban.
Masalah yang Diselesaikan #
Bayangkan skenario ini dengan round robin:
Server A: menangani 100 request ringan (selesai dalam 10ms)
Server B: menangani 1 request berat (butuh 5 detik)
Round robin akan terus mengirim request baru ke Server B
meskipun Server B sedang sibuk dengan satu request berat.
Least connections akan melihat:
Server A: 0 koneksi aktif ← kirim ke sini
Server B: 1 koneksi aktif (masih berjalan)
Least connections secara alami menghindari server yang sedang sibuk dan mengarahkan traffic ke server yang paling siap.
Konfigurasi #
upstream app_servers {
least_conn; # Aktifkan algoritma least connections
server 10.0.0.1:3000;
server 10.0.0.2:3000;
server 10.0.0.3:3000;
}
server {
location / {
proxy_pass http://app_servers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Cukup tambahkan directive least_conn di dalam upstream block. Semua parameter server lainnya (max_fails, fail_timeout, backup, dll.) tetap berlaku seperti pada round robin.
Bagaimana Nginx Menghitung Koneksi Aktif #
Yang dihitung adalah koneksi yang sedang aktif ke sebuah server — yaitu koneksi yang sudah dibuka tapi belum ditutup. Ini mencakup:
- Request yang sedang diproses backend
- Koneksi keepalive yang sedang menunggu request berikutnya
Contoh situasi saat request baru masuk:
Server A: 5 koneksi aktif
Server B: 2 koneksi aktif ← Least connections pilih ini
Server C: 8 koneksi aktif
Request berikutnya → Server B
Jika beberapa server memiliki jumlah koneksi yang sama, Nginx menggunakan weighted round robin di antara mereka sebagai tiebreaker.
Least Connections dengan Weight #
Bisa dikombinasikan dengan weight untuk memperhitungkan kapasitas server yang berbeda:
upstream app_servers {
least_conn;
server 10.0.0.1:3000 weight=3; # Server lebih kuat
server 10.0.0.2:3000 weight=1; # Server lebih lemah
}
Dengan weight, server pertama akan mendapat lebih banyak koneksi sebelum dianggap “sibuk” relatif terhadap server kedua.
Perbandingan: Round Robin vs Least Connections #
Round Robin cocok untuk:
✓ Request dengan durasi pemrosesan yang seragam
✓ Aplikasi yang sangat cepat (response < 100ms)
✓ Situasi di mana jumlah koneksi aktif selalu rendah
✓ Prediktabilitas distribusi traffic
Least Connections cocok untuk:
✓ Request dengan durasi pemrosesan yang sangat bervariasi
(ada yang selesai dalam 10ms, ada yang butuh 30 detik)
✓ API dengan endpoint campuran: beberapa ringan, beberapa berat
✓ Aplikasi yang melakukan query database kompleks
✓ WebSocket atau koneksi long-lived lainnya
Untuk kebanyakan aplikasi web modern dengan response time yang konsisten di bawah beberapa ratus milidetik, perbedaan antara round robin dan least connections sangat kecil. Least connections mulai menunjukkan keunggulan ketika ada variasi signifikan dalam waktu pemrosesan request.
Ringkasan #
least_connmengirim request ke server dengan jumlah koneksi aktif paling sedikit — lebih adaptif dari round robin untuk workload yang bervariasi.- Bisa dikombinasikan dengan
weightuntuk memperhitungkan server dengan kapasitas berbeda.- Keunggulan utama: secara alami menghindari server yang sedang sibuk tanpa konfigurasi health check tambahan.
- Untuk request dengan durasi seragam dan pendek, round robin dan least connections akan menghasilkan distribusi yang hampir sama.