¿Qué tipo de algoritmos de equilibrio de carga hay?

32

Estaba investigando diferentes algoritmos de equilibrio de carga para HTTP y acabo de encontrar 3. Random, Round Robin y Weighted Round Robin. ¿Hay más opciones?

Gracias paul

Paul Sheldrake
fuente

Respuestas:

33

Los algoritmos de equilibrio de carga más comunes para equilibradores de carga HTTP son en mi humilde opinión:

  • Round Robin (a veces llamado "Next in Loop").

  • Round Robin ponderado : como Round Robin, pero algunos servidores obtienen una mayor parte del tráfico general.

  • Al azar .

  • Fuente IP hash. Las conexiones se distribuyen a los servidores de back-end en función de la dirección IP de origen. Si un nodo web falla y queda fuera de servicio, la distribución cambia. Mientras todos los servidores estén ejecutando, una dirección IP de cliente determinada siempre irá al mismo servidor web.

  • URL hash. Al igual que el hash de IP de origen, excepto que el hash se realiza en la URL de la solicitud. Es útil cuando se equilibra la carga frente a las memorias caché de proxy, ya que las solicitudes de un objeto determinado siempre irán a una sola memoria caché de fondo. Esto evita la duplicación de la memoria caché, ya que tiene el mismo objeto almacenado en varias / todas las memorias caché, y aumenta la capacidad efectiva de las memorias caché de fondo.

  • Menos conexiones , menos conexiones ponderadas. El equilibrador de carga monitorea el número de conexiones abiertas para cada servidor y lo envía al servidor menos ocupado.

  • Menos tráfico , menos tráfico ponderado. El equilibrador de carga monitorea la tasa de bits de cada servidor y lo envía al servidor que tiene el menor tráfico saliente.

  • Menos latencia . Perlbal realiza una solicitud rápida de OPCIONES HTTP a los servidores de fondo y envía la solicitud al primer servidor para que responda.

Podría decirse que lo anterior no son algoritmos en un sentido estricto de la informática, son descripciones más generales de enfoques comunes. Aquí hay un pequeño artículo de Cisco que describe algunos de los algoritmos que usan con más detalle . Las implementaciones de otros proveedores serán ligeramente diferentes.

Hay casos extremos donde los algoritmos más exóticos son útiles, por ejemplo, la transmisión de video puede prestarse bien al "menor tráfico". Pero en términos generales, para la mayoría de las aplicaciones web y sitios web, la solución óptima es:

  • Un sistema de sesión compartido / distribuido , para que cualquier nodo web pueda responder a cualquier solicitud del usuario (es decir, los datos de la sesión del usuario, como las cookies de sesión, están igualmente disponibles para todos los servidores).

  • Equilibrio de carga usando Round Robin (opcionalmente Weighted Round Robin) o distribución aleatoria . Round Robin y Random son algoritmos simples y resistentes sin ningún problema de "punto caliente", es decir, la distribución de carga a los backends sigue siendo justa en todas las situaciones.

Jesper M
fuente
5

La pregunta está incompleta:

Balance de carga ¿QUÉ?

Las CPU pueden tomar saturación; la perspectiva habitual es hacia atrás: presionar un recurso en lugar de tirar de él.

Los discos tienen muchos tipos diferentes de cargas para equilibrar, como espacio, velocidades de lectura, velocidades de escritura, rendimiento, etc.

Las redes se pueden equilibrar en función de la latencia o el rendimiento total ...

Se puede equilibrar la carga de las personas en función de la capacidad individual; algunas tareas múltiples bien, otras no y luego hay calidad frente a cantidad. Puede optimizar sus recursos humanos en función de muchos factores y con diferentes pesos dados a diferentes atributos.

Lo anterior está lejos de ser exhaustivo; El punto es que diferentes recursos requieren tipos completamente diferentes de equilibrio de carga. De sus atributos y capacidades disponibles, debe indicar cuáles son de interés en el equilibrio.

Lo que está tratando de equilibrar es el primer criterio para hacer un buen algoritmo de equilibrio. Y la sugerencia de que solo hay tres es ... no iluminada. Sería digno de un doctorado hacer un trabajo adecuado tratando de delinear todas las formas en que "las cargas están equilibradas".

RT

Richard T
fuente
2
te estás perdiendo la pregunta Richard, los algoritmos son la base de cualquier método o implementación.
monomyth
2
Lo siento monomito, no me perdí una maldita cosa. Abre tu mente.
Richard T
@monomyth, @Richard tiene razón: la elección del algoritmo depende del equilibrio de carga. Puede desarrollar un algoritmo para equilibrar la carga del uso del espacio en disco y que puede no aplicarse en absoluto a otra cosa, como las solicitudes HTTP.
Josh
@ Josh, @ Richard, los conceptos de equilibrio de carga son los mismos. Todavía puede usar Round Robin para equilibrar el uso del disco, iSCSI, HTTP, CPU, cualquier cosa.
Mark Henderson
@Farseeker Estoy de acuerdo, Round Robin es bastante universal. Pero, ¿no hay algunos algoritmos de equilibrio de carga que sean específicos de la tarea?
Josh
0

No es una respuesta directa a su pregunta, sino una solución real que hemos encontrado útil. Usando LVS y el demonio pulse, nuestro equilibrio de carga HTTP está configurado para llamar a un script bash personalizado que determina la carga en los "servidores reales" a través de una simple conexión SSH y una llamada al tiempo de actividad .

Luego, según el promedio de carga de los servidores, se establece una ponderación por servidor. No es el enfoque más científico, ya que el promedio de carga no es necesariamente indicativo de conexiones HTTP o carga de CPU causadas por esas conexiones. No obstante, hemos tenido resultados sorprendentemente efectivos.

Mi 2c. YMMV.

PD: eche un vistazo al proyecto LVS : definitivamente encontrará información sobre implementaciones de programación de equilibrio de carga.

Zayne S Halsall
fuente