¿Qué es un Application Load Balancer?
Si te dedicas al despliegue de aplicaciones web seguramente sepas qué es un balanceador de carga. Dentro de este tipo de componentes hoy vamos a abordar el Application Load Balancer (ALB) que es un balanceador de carga de capa 7 que distribuye tráfico hacia varios backends. Funciona mediante los protocolos HTTP o HTTPS y está pensado para funcionar con instancias de servidores, contenedores o IP.
Qué es un Application Load Balancer
Un Application Load Balancer es un componente usado para el despliegue de aplicaciones que se encarga de ofrecer un punto de entrada único para las conexiones de los clientes, repartiendo las solicitudes hacia múltiples destinos que son capaces de soportar un mismo servicio o varios servicios. Funciona tanto con máquinas virtuales, pods de Kubernetes o contenedores, por lo que se adapta bien a todo tipo de despliegues modernos.
Este tipo de componente opera en la capa de aplicación del modelo OSI (capa 7), lo que le permite tomar decisiones usando información contenida en el protocolo HTTP (o HTTPS), como la URL, el host o las cabeceras de la solicitud.
Cómo funciona un ALB
Como otros tipos de balanceadores de carga, un ALB se encarga de recibir peticiones de clientes y enviarlas hacia alguno de los servidores. El ALB ofrece un punto de entrada único pero puede trabajar con uno o varios listeners. Un listener puede ser por ejemplo HTTP en el puerto 80 y HTTPS en el puerto 443. Una vez recibida la solicitud se encarga de evaluarla y responder en función de unas reglas configuradas, que permitan decidir a qué grupo de destino enviar cada solicitud.
Además, dentro de cada grupo, puede aplicar un algoritmo de balanceo específico, como pueden ser round-robin o least outstanding requests. También permite distinguir qué servidores de destino se encuentran con buena salud, enviando tráfico solamente a los targets que estén funcionando como se espera.
Enrutamiento basado en reglas
El Application Load Balancer define una serie de reglas de enrutamiento que pueden incluir numerosos parámetros, como por ejemplo el host, la ruta, los headers, o incluso detalles más específicos como de la solicitud como el método HTTP, variables en el query string, o IP de origen. Cada regla combina estas condiciones con una acción del balanceador, como reenviar a un target group, redireccionar, responder con un código determinado, etc.
Gracias a estas reglas y tipos de acciones podemos enviar por ejemplo rutas como /api/* a un servicio de API y /static/* a otro backend dentro del mismo ALB.
Balanceo a nivel de aplicación
El balanceo a nivel de aplicación permite tomar decisiones a través del contexto de la aplicación, no solo de IP y puerto. Esto se consigue al trabajar en capa 7 e inspeccionar las peticiones HTTP/HTTPS.
Esta es una funcionalidad básica para que se puedan balancear múltiples aplicaciones o microservicios detrás del mismo ALB usando diferentes paths, hosts o cabeceras.
Gestión de HTTP y HTTPS
El ALB soporta tráfico tanto HTTP como de HTTPS y para facilitar las cosas podemos darle la responsabilidad de gestionar los certificados, haciendo que el componente se encargue de la terminación TLS, es decir, descifrar la conexión segura en el propio balanceador usando certificados configurados.
Integración con contenedores y microservicios
Los ALB están pensados para usarse con orquestadores como Kubernetes o servicios de contenedores gestionados. Son básicos porque pueden asignar dinámicamente puertos y registrar tareas o pods como destinos. Este enfoque encaja muy bien con arquitecturas de microservicios.
Características principales de ALB
Para entender mejor en qué consiste un ABL vamos a ver ahora las características concretas que nos ofrecen y los motivos por los que son ideales para aplicaciones web y APIs modernas.
Enrutamiento avanzado por host y ruta
Las reglas de enrutamiento permiten definir comportamientos dependiendo del nombre de host y la ruta, usando un mismo balanceador. Esto ofrece mucha versatilidad y limita la complejidad de las instalaciones. Además reduce costes porque se reutiliza una sola IP o endpoint público y con ello puedes incluso servir múltiples dominios, cada uno con su aplicación.
Soporte para WebSockets y HTTP/2
Además del mencionado HTTP, los ALB soportan protocolos modernos como WebSockets, que son esenciales para aplicaciones en tiempo real. Además, están preparados para usar la versión HTTP 2.
Alta disponibilidad y escalado automático
Como otros balanceadores nos permiten ofrecer alta disponibilidad, pero incluso se comporta de manera más inteligente, ya que el servicio distribuye el tráfico entre backends que están activos y saludables en ese momento. Además es capaz de manejar múltiples zonas de disponibilidad. Por si fuera poco, también escala automáticamente la capacidad del balanceador según el volumen de peticiones.
Seguridad con SSL/TLS
Por supuesto el ALB funciona perfectamente con certificados SSL/TLS. Además es capaz de centralizar la terminación de HTTPS y simplificar la rotación de certificados.
Monitorización y health checks
También es interesante por las ventajas que nos ofrece para la monitorización centralizada del sistema, ofreciendo métricas y logs detallados para analizar el funcionamiento de los servicios. Incluye también health checks que son configurables por puerto y ruta, para verificar el estado real de cada servicio antes de enviar tráfico hacia un servidor.
Ventajas de usar un Application Load Balancer
Los ALB son capaces de aportar numerosos beneficios tanto a los usuarios como a los administradores de sistemas. Por ejemplo, mejora la disponibilidad, aporta flexibilidad y simplifica la seguridad. Vamos a ver punto por punto éstas y otras ventajas.
Mejora del rendimiento de aplicaciones web
Gracias a un balanceador de carga es posible que las aplicaciones mejoren su rendimiento, ya que las solicitudes se pueden distribuir entre múltiples instancias, evitando que un solo servidor se convierta en cuello de botella.
Mayor tolerancia a fallos
Los ALB son capaces de mejorar de manera inteligente la disponibilidad de las aplicaciones y su tolerancia a fallos. Por ejemplo, son capaces de evitar el envío de tráfico a instancias que están fallando y redirigirlo hacia otras instancias que funcionan correctamente. Así se reduce el impacto de caídas puntuales de servidores, o incluso de una zona completa en la disponibilidad global de la aplicación.
Optimización de la experiencia del usuario
Todos los beneficios anteriores impactan de manera notable en la experiencia de usuario. Las mejoras de rendimiento, al distribuir la señal entre varios servidores, consiguen que las aplicaciones funcionen más rápido. Por otra parte, al conseguir mandar el tráfico a las instancias que funcionan bien, es menos probable que el usuario acceda a recursos que devuelvan errores o simplemente que no respondan, lo que también hace que mejore su experiencia global.
Facilidad de gestión en entornos cloud
La enorme versatilidad que nos ofrecen los ALB se aprecia sobre todo en entornos cloud donde muchas veces los servidores son efímeros. Además el ALB se gestiona como un servicio administrado, lo que nos dispensa de mantener hardware o software de balanceo.
Escalabilidad bajo demanda
La escalabilidad de los ALB está garantizada, ya que pueden aumentar o reducir su capacidad de forma automática según el volumen de tráfico, y todo ello sin necesidad de realizar cambios en la configuración de los clientes. Gracias a ellos las aplicaciones pueden añadir o retirar instancias o contenedores dinámicamente y el balanceador les enviará el tráfico cuando se registren.
Casos de uso habituales de ALB
En líneas generales los ALB encajan muy bien en entornos exigentes y modelos de aplicaciones modernas. Para concretar, vamos a enumerar a continuación los casos de uso donde el ALB nos irá especialmente bien.
Aplicaciones web con alto tráfico
Si tienes que manejar un sitio web o aplicación que reciba muchas peticiones concurrentes el ALB es especialmente interesante, por su capacidad de repartir la carga entre varios servidores. Además, se aconsejan para aplicaciones que tengan picos de demanda, ya sean diarios o estacionales, gracias a que son capaces de integrarse con el autoescalado.
Arquitecturas basadas en microservicios
Las arquitecturas basadas de microservicios son especialmente indicadas para funcionar con un ALB, ya que puede enrutar diferentes dominios o rutas de carpetas a servicios distintos y lo mejor es que solamente necesitamos un ALB. Incluso con ellos conseguiremos un despliegue independiente de cada servicio. Al mismo tiempo facilita algunas necesidades de las aplicaciones modernas, como el versionado de APIs
Balanceo de carga en contenedores
El ALB se integra muy bien con el despliegue en contenedores, ya que es capaz de trabajar con el orquestador para descubrir automáticamente nuevos contenedores y empezar a enviarles tráfico cuando están disponibles.
API y servicios backend
Las API son ideales para los ALB, ya que es el típico despliegue que funciona muy bien con múltiples servidores backend. Gracias al ALB podremos hacer más sencilla la gestión de la seguridad y configurar de reglas avanzadas de enrutamiento.
Aplicaciones distribuidas en la nube
En general, para todo tipo de aplicaciones distribuidas en la nube los ALB serán ideales. Puedes hacer configuraciones sencillas e incluso complejas con bastante facilidad. Por ejemplo puedes tener aplicaciones desplegadas en varias zonas y el ALB ayuda a dirigir el tráfico a los recursos más cercanos o disponibles.
ALB vs. otros balanceadores de carga
Vamos a ver ahora cuáles son las diferencias entre distintos tipos de balanceadores de carga, como los clásicos network load balancer y los ALB.
Diferencias entre ALB y Network Load Balancer
Aquí la diferencia más destacada es la capa de operación. Como hemos dicho, el ALB trabaja en capa 7 usando tanto HTTP como HTTPS, con la posibilidad de tomar decisiones basadas en la URL, host o headers, con un enrutamiento avanzado. Por su parte, los network load balancer (NLB) operan en capa 4 TCP / UDP y se centran únicamente en IPs y puertos.
Por tanto, los casos de uso de ALB son más amplios, pudiendo dar soporte a aplicaciones web y APIs de una manera más consistente y configurable. Por su parte los NLB tienen casos de uso más orientados a tráfico de baja latencia y protocolos no HTTP (como bases de datos o servicios binarios).
ALB vs. Classic Load Balancer
En este caso, el modelo de capa del Classic Load Balancer puede ser un poco más amplio, ya que combina características de capa 4 y 7. Sin embargo, las diferencias en cuanto a capacidades avanzadas de enrutamiento hacen que el ALB sea mucho más completo e inteligente. Además ALB soporta otras tecnologías con WebSockets.
Por ello, generalmente en los nuevos proyectos se acaba instalando más ALB que los Classic Load Balancers, ya que sus funcionalidades modernas suelen venir muy bien a arquitecturas avanzadas como microservicios, además de encajar mejor con el cloud.
Buenas prácticas para configurar un ALB
Ya para acabar queremos abordar una serie de recomendaciones que nos permitirán aprovechar mejor los ALB y por tanto extraer todos sus beneficios.
Definir reglas de enrutamiento eficientes
Comienza por estudiar bien los servicios que necesitas exponer para definir las reglas de manera clara, usando las opciones disponibles de host y path. Usa agrupaciones de servicios relacionados en target groups lógicos y evita solapamientos que dificulten el mantenimiento de las reglas.
Configurar correctamente los health checks
Configurar correctamente los health checks es esencial para obtener los beneficios que nos aportan los ALB. Éstos deben apuntar a una ruta ligera pero representativa del estado de la aplicación y también se ha de ajustar tiempos de timeout dentro de lo razonable, usando también intervalos, para evitar dar un servicio como fallido si hay un pico de latencia o un fallo puntual
Optimizar la seguridad con HTTPS
Usar las funcionalidades de gestión de certificados de los ALB facilita luego la gestión del tráfico seguro en los servicios. Usa la terminación TLS siempre que sea posible en el balanceador, cuidando de usar protocolos y algoritmos fuertes.
Escalar correctamente los targets
Otra cosa importante para aprovechar el ALB es configurar mecanismos de autoescalado, tanto a la hora de añadir instancias como a la hora de eliminarlas. Se pueden usar diversos criterios para configurar el autoescalado, según el uso de la CPU, la latencia o el número de peticiones.
Monitorizar el rendimiento y el tráfico
En el día a día conviene revisar métricas como número de peticiones, errores de servidor, latencia o número de targets saludables. Estos valores nos permitirán acompañar el buen funcionamiento de los sistemas y reaccionar en caso que sea necesario.