Dipende dal protocollo e dal caso d'uso da bilanciare. Per qualsiasi cosa in cui la quantità di connessioni è correlata al carico / utilizzo, è meglio usare leastconn
. A causa del modo in cui funzionano le reti e le applicazioni, è praticamente sempre vero e stai meglio usando leastconn
di default.
Desktop remoti RDP / X11 / Jump Host
Ad esempio, un'azienda ha un pool di desktop remoti a cui i dipendenti si connettono. Vorresti che i dipendenti fossero distribuiti in qualche modo uniforme sui desktop.
Il numero di connessioni attive in quel caso d'uso è approssimativamente "quanti impiegati stanno usando quel desktop in questo momento". L'host con il minor numero di connessioni ha meno dipendenti che lo utilizzano ed è probabilmente il meno caricato. Usa "leastconn" in queste circostanze, distribuisce il carico in modo uniforme con la quantità di utenti.
Un bilanciamento del carico ideale dovrebbe essere consapevole del carico del desktop remoto. Quanti utenti? Quante applicazioni? Quanta memoria e CPU consumano? Esistono soluzioni commerciali dedicate ai desktop remoti (Microsoft / Citrix / ecc ...), in genere misurano queste metriche per diffondere molto bene l'utilizzo. HAProxy è un semplice bilanciamento del carico di rete e non può fare di meglio che contare le connessioni leastconn
.
HTTP / HTTPS
Con HTTP, una connessione attiva significa che il server è occupato nell'elaborazione di una richiesta. Le connessioni sono direttamente proporzionali al carico. Si desidera selezionare il server con il minor numero di connessioni attive (richieste in corso). Utilizzare leastconn
per il traffico HTTP (S).
Immagina uno scenario con due server HTTP, in cui un server è più lento nell'elaborare le richieste (forse è sovraccarico, forse ha hardware meno recente).
roundrobin
distribuirà la metà delle richieste tra i due server. È molto inefficiente, il server più veloce dovrebbe richiedere di più. Peggio ancora, il server più lento potrebbe essere sovraccarico, diventerà ancora più lento con l'arrivo di più richieste e potrebbe iniziare a far cadere le richieste in qualsiasi momento. Non lo vuoi.
leastconn
rileverà che i server sono irregolari. Il server più lento mantiene le connessioni più a lungo, ha un conteggio delle connessioni più elevato. leastconn
tiene conto di ciò e preferisce l'altro server.
Nella mia esperienza, compresi i ruoli in cui stavo eseguendo esclusivamente test delle prestazioni per siti Web di dimensioni medio-grandi. leastconn
può essere efficiente del 300% rispetto roundrobin
a HTTP (S). roundrobin
non distribuisce correttamente la connessione e causerà instabilità a carico elevato.
Richiesta DNS
(Ignoriamo che HAProxy non supporta UDP e UDP è meno connessione).
Un ultimo esempio. DNS è un protocollo semplice. I client inviano un singolo messaggio UDP per richiedere un dominio e il server DNS risponde in un singolo messaggio.
In questo caso, non esiste davvero una connessione. Anche se ci fosse, sarebbe immediatamente chiuso (teoricamente).
Non avrebbe senso contare le connessioni in queste circostanze, non è ottimale per leastconn
. Un semplice roundrobin
può distribuire messaggi.
Un malinteso comune
Le persone a volte credono che non dovrebbero usare leastconn
per connessioni di breve durata (simile all'ultimo esempio). Anche la documentazione di HAProxy è fuorviante al riguardo.
leastconn
Use of this algorithm is recommended where very long sessions are
expected, such as LDAP, SQL, TSE, etc... but is not very well
suited for protocols using short sessions such as HTTP.
[misleading advice, should ignore it]
Nel mondo reale, short connections
non è una cosa.
Le applicazioni sono basate su TCP. I messaggi vengono recapitati e spesso elaborati in ordine. Quando un server è lento o sovraccarico, le connessioni "brevi" diventano più lunghe. Se ci sono (più) connessioni, probabilmente c'è qualche (più) lavoro in corso. Il conteggio e la durata della connessione variano e hanno significato.
Pensa a un server HTTP di base. Alcune risorse richiedono alcuni millisecondi, alcune chiamate API impiegano alcuni secondi, il caricamento di una pagina potrebbe richiedere del tempo con qualsiasi quantità di richieste al suo interno, ecc. Le richieste non hanno vita breve, la loro durata segue ciò che viene elaborato su quale server. leastconn
comprende l'attività in corso e regola la distribuzione, che è esattamente ciò che si desidera da un bilanciamento del carico.