¿Qué son los balanceadores de carga? Cómo distribuir eficazmente el tráfico entrante


Los balanceadores de carga son componentes de infraestructura que distribuyen el tráfico de red entrante entre múltiples servidores backend. Mejoran la capacidad y agregan redundancia al mantener los servicios accesibles si uno de sus servidores falla.

Los balanceadores de carga actúan como la puerta de enlace pública a su aplicación. Están especializados en su función, por lo que pueden optimizarse en gran medida para maximizar el rendimiento del tráfico. Los balanceadores de carga generalmente se pueden configurar con varios tipos de algoritmos de enrutamiento para cumplir con los requisitos de su aplicación.

En este artículo, exploraremos qué son los balanceadores de carga, cómo funcionan y algunas de las complicaciones que pueden causar. También explicaremos las diferencias entre los algoritmos de equilibrio de carga más comunes.

Qué hacen los balanceadores de carga

Los balanceadores de carga son responsables de proporcionar un proxy inverso frente a los servidores de su aplicación. Todos los clientes se conectan a este único proxy en lugar de a las instancias de back-end individuales. El balanceador de carga es responsable de seleccionar un servidor para manejar cada solicitud. Esto ocurre de forma invisible para el cliente externo.

Están disponibles implementaciones de balanceador de carga basadas en hardware y software. Por el lado del software, la mayoría de los servidores web, como Apache y NGINX, son capaces de cumplir la función. Los balanceadores de carga de tipo hardware se implementan como componentes de infraestructura independientes de su proveedor de alojamiento.

Los balanceadores de carga generalmente monitorean el estado de las instancias en su grupo de servidores back-end. Los backends que se vuelven inestables dejan de recibir tráfico nuevo, lo que reduce la inestabilidad del servicio y el tiempo de inactividad. De manera similar, los balanceadores de carga generalmente le permiten agregar nuevas instancias de back-end en cualquier momento, para que pueda escalar su servicio con capacidad adicional durante las horas pico.

El objetivo principal de un balanceador de carga es maximizar el rendimiento y hacer el uso más eficiente de los recursos disponibles. Ser capaz de escalar horizontalmente a través de servidores físicos suele ser más efectivo que hacer crecer verticalmente un solo nodo con CPU o memoria adicional. El escalado horizontal le brinda más redundancia y capacidad, mientras que la sobrecarga incurrida por la capa del balanceador de carga es generalmente nominal.

Algoritmos de equilibrio de carga

Aunque el objetivo del equilibrio de carga es siempre distribuir el tráfico entre varios servidores, hay varias formas de lograrlo. Antes de analizar estrategias específicas, es importante identificar los dos tipos fundamentales de algoritmo que puede seleccionar:

  • equilibrio estático – Estos métodos funcionan a partir de valores de configuración codificados, lo que los hace completamente predecibles en su funcionamiento. Este tipo de algoritmo no tiene en cuenta el estado de los servidores backend a los que puede reenviar, por lo que podría seguir enviando nuevas solicitudes a una instancia ya congestionada.
  • Equilibrio dinámico – Los algoritmos dinámicos se ajustan en tiempo real según el flujo de tráfico y la disponibilidad de servidores en su grupo. Estas estrategias pueden evitar automáticamente instancias que ya están manejando varias solicitudes. El equilibrio de carga dinámico puede aumentar marginalmente los gastos generales, ya que el equilibrador de carga tiene que realizar un seguimiento del estado de finalización de cada solicitud.

Los sistemas de equilibrio estático suelen ser más fáciles de configurar, probar e inspeccionar. El equilibrio dinámico es mucho más potente y suele ser la opción preferida para las aplicaciones de producción. Dentro de cada una de estas clases, hay varias estrategias de enrutamiento específicas que puede elegir:

  • todos contra todos – Round robin es un método de equilibrio estático que dirige las solicitudes a cada servidor por turno. Si tiene tres servidores A, B y C, la primera solicitud entrante irá a A, la segunda a B y la tercera a C. El balanceador de carga comenzará nuevamente en A para la cuarta solicitud.
  • turno rotativo ponderado – Una variación del algoritmo round robin donde los administradores definen las prioridades relativas de cada servidor en el grupo. Un servidor de gran peso se utilizará con más frecuencia y recibirá una mayor parte del tráfico. Este método le permite utilizar la estrategia de operación por turnos cuando su grupo de servidores comprende servidores con especificaciones desiguales.
  • Aleatorio – Muchos balanceadores de carga incluyen una opción aleatoria real como opción estática alternativa.
  • Troceado – Esta estrategia de equilibrio estático genera un hash de la dirección IP del cliente para determinar cuál de los servidores back-end manejará la solicitud. Esto garantiza que la misma instancia sirve a todas las conexiones que se originan en ese cliente.
  • Menos conexiones – Este es un algoritmo dinámico popular que siempre dirige las solicitudes entrantes al servidor con la menor cantidad de conexiones abiertas. En muchas aplicaciones, esta es la forma más efectiva de maximizar el rendimiento general.
  • Mayor disponibilidad de ancho de banda – Este método envía tráfico nuevo al servidor con el mayor ancho de banda disponible. Esto es ideal en situaciones en las que es probable que las solicitudes individuales utilicen grandes cantidades de ancho de banda incluso si el recuento total de solicitudes sigue siendo bajo.
  • Punto final de estado/carga personalizado – Muchos balanceadores de carga incluyen una forma de tomar decisiones de distribución de tráfico basadas en métricas personalizadas expuestas por sus servidores backend. Se pueden realizar consultas sobre el uso de la CPU, el consumo de memoria y otras medidas críticas utilizando un mecanismo como SNMP.

Otras características del balanceador de carga

Los balanceadores de carga pueden crear algunas complicaciones para su aplicación. Uno de los más frecuentes es el desafío de lograr sesiones de back-end pegajosas. Es común que los sistemas mantengan el estado en el servidor y necesiten persistir entre las conexiones de los clientes.

Puede mitigar esto utilizando el algoritmo de equilibrio hash o una opción similar basada en el cliente. Esto garantiza que las conexiones desde la misma dirección IP terminen en un servidor en particular. La mayoría de los balanceadores de carga también ofrecen una opción explícita de sesiones fijas que busca un encabezado o cookie designado en una solicitud HTTP. Este valor se puede utilizar para dirigir solicitudes de forma coherente al mismo servidor después de la conexión inicial del cliente.

Los balanceadores de carga también pueden crear complejidad en torno a SSL. Muchas organizaciones configuran SSL para terminar en el balanceador de carga. Las conexiones entre el balanceador de carga y sus servidores back-end se realizan a través de HTTP normal. Esto generalmente da como resultado una experiencia de configuración más simple con demandas de mantenimiento reducidas.

El uso de conexiones solo HTTP en la dirección de avance no siempre es aceptable para las cargas de trabajo críticas para la seguridad. Los balanceadores de carga capaces de realizar transferencia SSL pueden enviar tráfico directamente a sus servidores backend, sin descifrar primero los datos. Sin embargo, esto restringe la funcionalidad de enrutamiento que puede usar: como el balanceador de carga no puede descifrar las solicitudes entrantes, no podrá realizar coincidencias basadas en atributos como encabezados y cookies.

Equilibradores de carga de capa 4 y capa 7

El equilibrio de carga a menudo se analiza en el contexto de las redes de Capa 4 (L4) y Capa 7 (L7). Estos términos describen el punto en el que el balanceador de carga enruta el tráfico dentro del ciclo de vida de una solicitud de red.

Un recurso de capa 4 opera en el nivel de transporte de red. Estos equilibradores de carga toman decisiones de enrutamiento en función de las características del transporte de la solicitud, como el puerto TCP o UDP que se utilizó. No se tienen en cuenta los datos específicos de la solicitud.

Un equilibrador de carga de capa 7 se encuentra junto a la capa de aplicación. Estos balanceadores de carga pueden acceder a datos complejos dentro de la solicitud y usarlos para informar las reglas de enrutamiento específicas de la carga de trabajo. Aquí es donde puede tener lugar el equilibrio de carga que representa una ID de sesión en un encabezado HTTP o una cookie.

El balanceo de carga de capa 7 es poderoso pero relativamente intensivo en recursos. Necesita analizar e inspeccionar el contenido de cada solicitud antes de que pueda pasarse a un backend. La naturaleza basada en paquetes de los balanceadores de carga de Capa 4 brinda menos control pero tiene un impacto correspondientemente reducido en el rendimiento. La capa 4 tampoco descifra el tráfico, por lo que un compromiso del balanceador de carga en esta etapa no expondrá los datos de la solicitud.

Conclusión

Los balanceadores de carga le permiten enrutar el tráfico entrante entre sus servidores. Son un componente fundamental de las arquitecturas de red de alta disponibilidad que le permiten ejecutar de forma transparente varias instancias de back-end. Esto aumenta la capacidad del servicio y evita una interrupción total si un servidor se desconecta.

La mayoría de las implementaciones de equilibradores de carga le ofrecen la posibilidad de elegir entre varios algoritmos diferentes, incluidas opciones tanto estáticas como dinámicas. Muchas aplicaciones están bien atendidas por opciones simples como «menos conexiones» o «intercambio por turnos», pero las opciones más complejas son útiles en situaciones específicas.

Es una buena práctica ejecutar cada aplicación de producción detrás de un balanceador de carga. Le brinda flexibilidad para escalar según demanda y reaccionar ante servidores en mal estado. El equilibrio de carga suele ser fácil de configurar dentro de su pila de alojamiento o en la infraestructura de red del proveedor de la nube.





Source link-39