Depende de cuál sea el protocolo y el caso de uso para equilibrar. Para cualquier cosa donde la cantidad de conexiones esté correlacionada con la carga / uso, es mejor usarla leastconn
. Debido a la forma en que funcionan las redes y las aplicaciones, es casi siempre cierto y es mejor usarlo leastconn
de forma predeterminada.
Escritorios remotos RDP / X11 / Jump Hosts
Por ejemplo, una empresa tiene un grupo de escritorios remotos a los que los empleados se conectan. Desea que los empleados se distribuyan de manera uniforme entre los escritorios.
El número de conexiones activas en ese caso de uso es aproximadamente "cuántos empleados están usando ese escritorio en este momento". El host con la menor cantidad de conexiones tiene la menor cantidad de empleados que la usan y probablemente sea la menos cargada. Use "leastconn" en estas circunstancias, distribuye la carga de manera uniforme con la cantidad de usuarios.
Un equilibrador de carga ideal debe tener en cuenta la carga del escritorio remoto. Cuantos usuarios Cuantas aplicaciones ¿Cuánta memoria y CPU consumió? Existen soluciones comerciales dedicadas a escritorios remotos (Microsoft / Citrix / etc ...), generalmente miden estas métricas para difundir el uso muy bien. HAProxy es un simple equilibrador de carga de red y no puede ser mejor que contar conexiones leastconn
.
HTTP / HTTPS
Con HTTP, una conexión activa significa que el servidor está ocupado procesando una solicitud. Las conexiones son directamente proporcionales a la carga. Desea seleccionar el servidor con la menor cantidad de conexiones activas (solicitudes en curso). Úselo leastconn
para el tráfico HTTP (S).
Imagine un escenario con dos servidores HTTP, donde un servidor es más lento para procesar solicitudes (tal vez esté sobrecargado, tal vez tenga hardware más antiguo).
roundrobin
distribuirá las solicitudes a la mitad entre los dos servidores. Es muy ineficiente, el servidor más rápido debería tomar más. Peor aún, el servidor más lento podría sobrecargarse, se volverá aún más lento a medida que ingresen más solicitudes y podría comenzar a descartarlas en cualquier momento. No quieres eso.
leastconn
detectaría que los servidores son desiguales. El servidor más lento mantiene las conexiones durante más tiempo, tiene un mayor recuento de conexiones. leastconn
explica eso y prefiere el otro servidor.
En mi experiencia, incluidos los roles en los que hacía pruebas de rendimiento exclusivamente para sitios web de moderados a grandes. leastconn
puede ser 300% tan eficiente como roundrobin
para HTTP (S). roundrobin
no distribuye la conexión de manera justa y causará inestabilidad en una carga alta.
Solicitud de DNS
(Ignoremos que HAProxy no es compatible con UDP y UDP es menos conexión).
Un último ejemplo. DNS es un protocolo simple. Los clientes envían un solo mensaje UDP para solicitar un dominio y el servidor DNS responde en un solo mensaje.
En este caso, no hay realmente una conexión. Incluso si lo hubiera, se cerraría instantáneamente (teóricamente).
No tendría sentido contar conexiones en estas circunstancias, no es óptimo para leastconn
. Un simple roundrobin
puede distribuir mensajes.
Un malentendido común
Las personas a veces creen que no deberían usar leastconn
para conexiones de corta duración (similar al último ejemplo). Incluso la documentación de HAProxy es engañosa al respecto.
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]
En el mundo real, short connections
no es una cosa.
Las aplicaciones se crean sobre TCP. Los mensajes se entregan y a menudo se procesan en orden. Cuando un servidor es lento o está sobrecargado, las conexiones "cortas" se vuelven más largas. Si hay (más) conexiones, probablemente se esté haciendo algo (más) de trabajo. El recuento de conexiones y la duración de la conexión varían y tienen significado.
Piense en un servidor HTTP básico. Algunos activos tardan unos pocos milisegundos, algunas llamadas a la API tardan unos segundos, una página puede tardar un tiempo en cargarse con cualquier cantidad de solicitudes dentro de ella, etc. leastconn
comprende la actividad en curso y ajusta la distribución, que es exactamente lo que desea de un equilibrador de carga.