Los balanceadores de carga de aplicaciones brindan escalabilidad, rendimiento y disponibilidad de manera inteligente. También garantizan que sus servidores no estén sobrecargados de trabajo y que estén preparados para manejar picos de tráfico.
La infraestructura de seguridad de cualquier equipo de TI se basa en balanceadores de carga. Los Load Balancers aseguran que su aplicación pueda manejar el tráfico entrante. En este artículo, analizaremos el Balanceador de carga de aplicaciones en AWS con más detalle.
What is an Application Load Balancer?
Application Load Balancer, también conocido como ALB, es un Balanceador de carga elástico o ELB en AWS. Opera en la capa de aplicación (la séptima capa) del Modelo de interconexión de sistemas abiertos (OSI).
Los ALB tienen tres componentes: escuchas, balanceador de carga y el grupo objetivo. Después de recibir una solicitud, el equilibrador de carga evalúa el reglas del oyente en orden de prioridad (para elegir qué regla ejecutar). A continuación, selecciona un objetivo de la grupo objetivo para la acción de la regla.
Puede configurar reglas de escucha para enviar solicitudes a diferentes grupos objetivo según el contenido del tráfico de la aplicación. El algoritmo de enrutamiento predeterminado para ALB es Round-robin; sin embargo, puede elegir la técnica de enrutamiento de solicitudes menos pendientes.
A medida que cambien sus necesidades, puede eliminar y agregar destinos desde su balanceador de carga sin interrumpir el flujo general de solicitudes de su aplicación.
Equilibrio de carga elástica (ELB) le permite escalar su balanceador de carga a medida que el tráfico de su aplicación cambia con el tiempo. Todos los Elastic Load Balancers pueden escalar automáticamente a la gran mayoría de las cargas de trabajo.
También puede crear verificaciones de estado para monitorear el estado de su aplicación en los destinos registrados para que el balanceador de carga solo envíe solicitudes a los destinos en buen estado.
Features of Application Load Balancers
Equilibrio de carga de capa 7
En función de los atributos de la solicitud, puede equilibrar la carga del tráfico HTTP/HTTPS y gRPC en instancias Amazon EC2, contenedores ECS, AWS Lambda, servidores de terceros o locales.
Características de seguridad
ALB admite salvaguardias de desincronización basadas en la biblioteca HTTP desync-guardian. Esta capacidad protege las aplicaciones de los clientes contra las vulnerabilidades de HTTP causadas por Desync sin sacrificar la disponibilidad o la latencia. Los clientes también pueden establecer su nivel de tolerancia para solicitudes cuestionables en función de la arquitectura de sus aplicaciones.
Soporte de puestos avanzados
Puestos de avanzada de AWS es una solución completamente administrada que extiende la infraestructura, los servicios y las herramientas de AWS a casi cualquier centro de datos, espacio de ubicación compartida o instalación local para una experiencia híbrida verdaderamente uniforme. Puede utilizar balanceadores de carga de aplicaciones con AWS Outposts. Los clientes pueden implementar ALB en tipos de instancias compatibles, y el ALB se escalará automáticamente hasta la capacidad del rack para adaptarse a diferentes niveles de cargas de trabajo de aplicaciones sin necesidad de intervención manual.
También puede configurar ALB para recibir recordatorios/alertas para ayudarlos a navegar por sus requisitos de capacidad de equilibrio de carga. Los clientes pueden usar la misma consola de AWS, CLIy API para aprovisionar y administrar ALB en Outposts que utilizan para aprovisionar y administrar ALB en regiones de AWS.
Terminación HTTPS
Un balanceador de carga de aplicaciones (ALB) admite la terminación de HTTPS entre los clientes y el balanceador de carga. Esto significa que la conexión entre su cliente y ALB es HTTPS, pero la conexión entre ALB y los servidores de aplicaciones (EC2, ECS, etc.) es HTTP.
Dado que la conexión entre ALB y los servidores de aplicaciones() está dentro de su VPC, está protegida por entidades externas de forma predeterminada. Los ALB pueden administrar Certificados SSL utilizando AWS Certificate Manager para políticas de seguridad predefinidas y AWS Identity and Access Management (IAM).
Compatibilidad con HTTP/2 y gRPC
HTTP/2 es un nuevo formulario de Protocolo de transferencia de hipertexto (HTTP) que permite que muchas solicitudes se transmitan en la misma conexión utilizando una única conexión multiplexada. También proporciona conexiones SSL a los clientes y comprime los datos del encabezado antes de enviarlos en formato binario.
El tráfico de gRPC se puede enrutar y equilibrar la carga a través de microservicios o entre clientes y servicios habilitados para gRPC mediante Application Load Balancer. Esto permite la integración fluida de la administración de tráfico de gRPC en las arquitecturas sin requerir cambios en la infraestructura subyacente en el extremo de los clientes o servicios.
gRPC es el protocolo elegido para comunicaciones entre servicios en arquitecturas de microservicios y emplea HTTP/2 para la transmisión. Tiene características como serialización binaria eficiente, soporte para una variedad de idiomas, así como los beneficios inherentes de HTTP/2, como una huella de red más pequeña, compresión y transmisión bidireccional, lo que lo hace superior a los protocolos heredados como REST.
Sesiones pegajosas
Las sesiones pegajosas permiten que las solicitudes del mismo cliente se enruten al mismo destino mediante cookies. Podemos configurar sesiones pegajosas fácilmente simplemente habilitando sesiones pegajosas y cookies en los atributos ALB. Balanceador de carga de aplicaciones (ALB) admite cookies basadas en duración y cookies basadas en aplicaciones.
Determinar cuánto tiempo su balanceador de carga debe enviar constantemente la solicitud del usuario al mismo destino es la clave para administrar las sesiones persistentes. Las sesiones Sticky están habilitadas en el nivel del grupo objetivo. Puede implementar una combinación de permanencia basada en la duración, permanencia basada en la aplicación y sin permanencia en diferentes grupos objetivo.
Compatibilidad con IPv6 nativo
El protocolo de Internet nativo versión 6 (IPv6) es compatible con Balanceadores de carga de aplicaciones en un VPC. Esto permite que los clientes se conecten a Application Load Balancer mediante IPv4 o IPv6.
Solicitar seguimiento
En todas las solicitudes que ingresan al balanceador de carga, el Balanceador de carga de la aplicación inyecta un nuevo encabezado HTTP de identificador personalizado "X-Amzn-Trace-Id". El seguimiento de solicitudes le permite seguir el progreso de una solicitud a medida que se dirige a numerosos servicios de AWS utilizando su ID único. Puede utilizar el seguimiento de solicitudes para encontrar problemas de rendimiento o cuellos de botella en su pila de aplicaciones.
Redirecciones
El balanceador de carga de aplicaciones (ALB) puede redirigir una solicitud entrante de una URL a otra. Por ejemplo, puede redirigir solicitudes HTTP a solicitudes HTTPS, lo que le permite cumplir con su objetivo de cumplimiento de navegación segura mientras mejora el ranking de búsqueda de su sitio y la puntuación SSL/TLS. Los redireccionamientos también pueden enrutar a los usuarios a un sitio web diferente, por ejemplo, una versión anterior de una aplicación a una versión más nueva.
Respuesta fija
El Balanceador de carga de aplicaciones puede administrar qué solicitudes de clientes atienden sus aplicaciones. Sin pasar la solicitud a la aplicación, puede responder a las solicitudes entrantes con códigos de respuesta de error HTTP y mensajes de error personalizados directamente desde el balanceador de carga.
Soporte de WebSockets
Los balanceadores de carga de aplicaciones son compatibles con WebSockets. Los WebSockets permiten que un servidor envíe mensajes en tiempo real a los usuarios finales sin necesidad de que soliciten (o sondeen) una actualización del servidor. Durante un largo tiempo Conexión TCP, el protocolo WebSockets permite canales de comunicación bidireccionales entre un cliente y un servidor.
Indicación de nombre del servidor (SNI)
SNI (Indicación de nombre de servidor) es una extensión de protocolo TLS en la que un cliente especifica el nombre de host al que conectarse en el protocolo de enlace TLS. El equilibrador de carga puede presentar numerosos certificados a través de un único agente de escucha seguro, lo que le permite admitir varios sitios web seguros con un solo agente de escucha seguro.
Con SNI, los balanceadores de carga de aplicaciones utilizan un proceso de selección de certificados inteligente para hacer coincidir el nombre de host en la solicitud con el certificado SSL correspondiente. Si el nombre de host de un cliente coincide con varios certificados, el equilibrador de carga elige el certificado óptimo en función de varios parámetros, incluidas las capacidades del cliente.
Direcciones IP como objetivos
Al usar las direcciones IP de los backends de la aplicación como objetivos, puede usar los ALB para equilibrar la carga de cualquier aplicación alojada en AWS, en las instalaciones o incluso en otros proveedores de la nube. Esto permite el equilibrio de carga a cualquier dirección IP e interfaz en el backend de una aplicación.
Direcciones IP también se puede usar como destino para aplicaciones de balanceo de carga alojadas localmente (a través de Direct Connect o VPN), VPC emparejadas y EC2-Classic (usando ClassicLink). Puede migrar a la nube, expandirse a la nube o conmutar por error a la nube con la capacidad de equilibrar la carga entre los recursos locales y AWS.
Funciones lambda como objetivos
Los usuarios pueden acceder a aplicaciones sin servidor desde cualquier cliente HTTP, incluidos los navegadores web, gracias a la compatibilidad de Application Load Balancers para ejecutar funciones Lambda para entregar solicitudes HTTP(S). Puede utilizar la compatibilidad con reglas de enrutamiento basadas en contenido para dirigir solicitudes a distintas funciones de Lambda registrando funciones de Lambda como destinos del balanceador de carga.
Un balanceador de carga de aplicaciones se puede usar como punto final HTTP estándar para aplicaciones que aprovechan los servidores y la computación sin servidor. Para desarrollar aplicaciones, puede usar las funciones de Lambda para crear un sitio web completo o combinarlas con instancias EC2, contenedores y servidores locales.
Enrutamiento basado en contenido
Suponga que su aplicación se compone de numerosos servicios independientes. En ese caso, un Balanceador de carga de aplicaciones puede enrutar una solicitud a un servicio en función del contenido de la solicitud, como el campo Host, la URL de ruta, el encabezado HTTP, el método HTTP, la cadena de consulta o la dirección IP de origen.
Enrutamiento basado en host: Usando el campo Host del encabezado HTTP, ALB puede enrutar una solicitud de cliente a varios dominios desde el mismo balanceador de carga.
Enrutamiento basado en ruta: La ruta URL del encabezado HTTP se puede usar para enrutar una solicitud de cliente.
Enrutamiento basado en encabezado HTTP: Se puede usar cualquier valor de encabezado HTTP estándar o personalizado para enrutar una solicitud de cliente.
Enrutamiento basado en el método HTTP: Se puede usar cualquier método HTTP estándar o personalizado para redirigir una solicitud de cliente.
Enrutamiento basado en parámetros de cadena de consulta: Una solicitud de cliente se puede enrutar según la cadena de consulta o los parámetros.
Dirección IP de origen Enrutamiento basado en CIDR: Una solicitud de cliente se puede enrutar en función de la dirección IP de origen CIDR desde la que se origina.
Soporte de aplicaciones en contenedores
Application Load Balancer mejora la compatibilidad con contenedores al distribuir la carga entre varios puertos en una única instancia de Amazon EC2 (mapeo dinámico de puertos). En la definición de la tarea de ECS, puede especificar un puerto dinámico, que le da al contenedor un puerto sin usar cuando se programa en la instancia de EC2. El programador de ECS utiliza este puerto para agregar la tarea al balanceador de carga.
ALB con cortafuegos de aplicaciones web
Con AWS WAF, ahora puede proteger sus aplicaciones web en sus balanceadores de carga de aplicaciones. AWS WAF protege sus aplicaciones web de las vulnerabilidades web típicas que pueden causar tiempo de inactividad de la aplicación, comprometer la seguridad o consumir recursos excesivos.
Modo de inicio lento con algoritmo de equilibrio de carga
Application Load Balancer (ALB) admite un algoritmo de equilibrio de carga por turnos. Además, el mecanismo de operación por turnos en Application Load Balancer incluye un modo de inicio retrasado que le permite agregar nuevos destinos sin sobrecargarlos con solicitudes. La opción de inicio lento permitirá que los objetivos se calienten antes de aceptar su parte justa de solicitudes durante un período de aceleración específico. El inicio lento es beneficioso para las aplicaciones que dependen de la memoria caché y requieren un período de preparación antes de que puedan reaccionar a las consultas de la mejor manera.
Autenticacion de usuario
Puede usar Application Load Balancer para descargar el mecanismo de autenticación de sus aplicaciones. Cuando los usuarios acceden a las aplicaciones en la nube, Application Load Balancer los autenticará. Los usuarios finales pueden autenticarse a través de proveedores de identidad social como Google, Facebook y Amazon, así como proveedores de identidad empresarial como Microsoft Active Directory a través de SAML o cualquier proveedor de identidad compatible con OpenID Connect, gracias a la perfecta integración de Application Load Balancer con Amazon Cognito.
Application Load Balancer también puede verificar usuarios empresariales conectándose directamente con su proveedor de identidad si ya tiene una solución IdP a medida que es compatible con OpenID Connect.
Benefits of shifting from a Classic Load Balancer(CLB) to an Application Load Balancer(ALB)
Los Classic Load Balancers fueron el primer tipo de Load Balancers de AWS. Aunque potentes, con la introducción de ALB y NLB, los balanceadores de carga clásicos se están quedando obsoletos lentamente. Muchas características que ahora son compatibles con las versiones más recientes de los balanceadores de carga no están presentes en el balanceador de carga clásico.
- Compatibilidad con las condiciones de la ruta: Puede configurar su agente de escucha con reglas que reenvían solicitudes en función de la URL de la solicitud. Esto le permite dividir su aplicación en servicios más pequeños (microservicios) y enrutar las solicitudes al servicio apropiado según el contenido de la URL.
- Soporte para condiciones de host: Puede configurar su oyente con reglas que reenvían solicitudes según el campo de host en el encabezado HTTP. Esto le permite enrutar solicitudes a muchos dominios utilizando un único balanceador de carga.
- El enrutamiento se admite en función de la información de la solicitud, como las condiciones y los métodos del encabezado HTTP, los parámetros de consulta y las direcciones IP de origen.
- Puede enviar solicitudes de enrutamiento a numerosas aplicaciones en un solo servidor EC2.
- Una instancia o dirección IP se puede registrar con numerosos grupos objetivo en un puerto separado.
- Puede redirigir las solicitudes de una URL a otra.
- Es posible devolver una respuesta HTTP personalizada.
- Compatibilidad con el registro de destinos para el equilibrador de carga por dirección IP, incluidos los destinos fuera de la VPC.
- Las funciones Lambda se pueden registrar como objetivos.
- Antes de enrutar las solicitudes, el balanceador de carga puede autenticar a los usuarios de sus aplicaciones utilizando sus identidades corporativas o sociales.
- Las aplicaciones en contenedores son compatibles. Al programar una tarea, Amazon Elastic Container Service (Amazon ECS) puede elegir un puerto no utilizado y usarlo para registrar la tarea con un grupo objetivo. Esto le permite aprovechar al máximo sus clústeres.
- Dado que los controles de salud se definen a nivel del grupo objetivo y CloudWatch las métricas se publican a nivel de grupo objetivo, está disponible el soporte para monitorear la salud de cada servicio individualmente. Cuando agrega un grupo objetivo a un grupo de Auto Scaling, puede escalar dinámicamente cada servicio según la demanda.
- La información adicional se registra en formato comprimido en los registros de acceso.
Palabras finales
Los balanceadores de carga de aplicaciones son balanceadores de carga de nueva generación que son elásticos, escalables y vienen con muchas características diferentes, especialmente para las necesidades de las aplicaciones web. Es posible que deba usar Classic Load Balancers si tiene aplicaciones heredadas alojadas en el EC2 Red clásica, pero para todas las cargas de trabajo de nueva generación, los ALB serán una opción obvia.