Nuevo Balanceador de Carga a nivel de Aplicación en AWS

En la primavera de 2009 AWS pone en marcha el servicio Elastic Load Balancing (ELB) de AWS en la primavera de 2009 (puede ver en este enlace el anuncio de aquel momento). Elastic Load Balancing se ha convertido en un componente clave de la arquitectura para muchas aplicaciones que funcionan con AWS. En paralelo con Auto Scaling , Elastic Load Balancing simplifica en gran medida la tarea de la creación de aplicaciones y permite escalar hacia arriba y abajo mientras se mantiene una alta disponibilidad.

En el nivel
En el conocido modelo de red OSI, los equilibradores de carga se ejecutan habitualmente en la capa 4 (transporte) o en la capa 7 (aplicación).

Un equilibrador de carga de capa 4 funciona en el nivel de protocolo de red y no conoce el contenido de los paquetes de red, desconoce las características específicas de HTTP y HTTPS. En otras palabras, se equilibra la carga sin necesidad de saber mucho sobre ella.

Un equilibrador de carga de la capa 7 es más sofisticado y más potente. Se inspeccionan los paquetes, tiene acceso a las cabeceras HTTP y HTTPS, y (con más información) puede hacer un trabajo más inteligente de repartir la carga.

Equilibrado de carga a nivel de Aplicación de AWS

Este nuevo equilibrador de carga se ejecuta en la capa 7 y es compatible con una serie de características avanzadas. La opción inicial (que ahora se llama “balanceador de carga clásico”) está todavía disponible y continúa ofreciendo balanceado en las capas 4 y 7.

Los balanceadores de carga a nivel de aplicación, soportan aplicaciones que se ejecutan en contenedores. Soportan dos protocolos standar en la industria (WebSocket y HTTP/2) y además proporcionan visibilidad adicional sobre las intancias y contenedores destino. Sitios Web y aplicaciones móviles, que se ejecutan en contenedores o instancias EC2, pueden beneficiarse del uso de Balanceadores de carga a nivel de Aplicación.

A continuación vamos a ver más en detalle cada una de estas características y después crearemos un nuevo Balanceador de carga a nivel de aplicación.

Enrutado basado en contenido

Un balanceador de carga a nivel de aplicación tiene acceso a las cabeceras HTTP y permite enrutar peticiones a diferentes servicios adecuadamente. Por ejemplo, podemos querer enviar peticiones que incluyan “/api” en el path del URL a un grupo de servidores (que llamaremos grupo destino) y aquellas peticiones que contengan “/mobile” a otros. Enrutar peticiones de esta manera permite construir aplicaciones que se componen de múltiples microservicios que pueden ejecutarse y escalarse de forma independiente.

Como veremos, cada Balanceador de Carga a nivel de Aplicación permite definir hasta 10 reglas basadas en URL para enrutar peticiones a un grupo de servidores objetivo. Más adelante, AWS prevee dar acceso a otros métodos de enrutado.

Soporte para aplicaciones basadas en contenedores

Muchos usuarios de AWS están empaquetando sus microservicios en contenedores y alojandolos en Amazon EC2 Container Service. Esto permite a una única instancia de EC2 ejecutar uno o más servicios, pero puede presentar algunos desafíos interesantes para los balanceadores de carga tradicionales respecto al mapeo de puertos y a la comprobación de estado de funcionamiento.

El balanceador de carga a nivel de Aplicación conoce y soporta las aplicaciones basadas en contenedores. Esto permite a una instancia alojar diferentes contenedores que escuchan on diferentes puertos detrá del mismo grupo destino y además una comprobación más fina de la comprobación del correcto funcionamiento de los puertos.


Mejores métricas

En los balanceadores de carga de nivel de aplicación es posible obtener métricas de cada uno de los micro-servicios. Esta es una de las consecuencias de poder ejecutar cada uno de los micro-servicios en su propio grupo de servidores. Este incremento de visibilidad permite un mejor trabajo de escalado y reducción en respuesta a servicios individuales.

Los balanceadores de carga a nivel de aplicación proporcionan nuevos métricas CloudWatch incluyendo tráfico general (GB), número de conexiones activas, y la tasa de conexión por hora.


Soporte para protocolos adicionales y cargas de trabajo

El balanceador de carga a nivel de aplicación soporta dos protocolos adicionales: WebSocket y HTTP/2
WebSocket permite crear conexiones de largos periodos de espera entre el cliente y el servidor. Esta es una alternativa más eficiente al método de la “vieja escuela” que usaba conexiones HTTP que permanecían abiertas por largos periodos de tiempo. Los WebSocket son adecuados para dispositivos móbiles y pueden ser utilizados para enviar información dinámica minimizando el consumo de energía. Los ALB (Balanceadores de Carga a nivel de Aplicación) proporcionan soporte nativo para WebSocket a través de los protocolos ws:// y wss://.

HTTP/2 supone una mejora significativa del original HTTP 1.1. El nuevo protocolo soporta peticiones multiplexadas a través de una única conexió lo que reduce considerablemente el tráfico de red.


Creando un balanceador de carga a nivel de aplicación

Vamos a crear un ALB y a configurarlo para procesar tráfico.

La consola de Elastic Load Balancing permite crear dos tipos de balanceadores

alb_con_splash_1

alb_config_top_1

alb_config_butt_1

alb_pick_cert_1

alb_set_sec_group_1

elb_set_target_1

alb_register_targets_1

alb_review_1

alb_my_alb_active_1

alb_create_target_1

alb_add_rule_1

Referencias

1. New – AWS Application Load Balancer

2. Multiplexing: TCP vs HTTP2

3. New Features for Amazon EC2: Elastic Load Balancing, Auto Scaling, and Amazon CloudWatch

Leave a Reply