PERF04-BP04 Utilizar el equilibrio de carga para distribuir el tráfico entre varios recursos
Distribuya el tráfico entre varios recursos o servicios para que su carga de trabajo aproveche la elasticidad que ofrece la nube. También puede utilizar el equilibrio de carga para descargar la terminación del cifrado con el objetivo de mejorar el rendimiento, la fiabilidad y administrar y enrutar el tráfico de manera eficaz.
Antipatrones usuales:
-
No se tienen en cuenta los requisitos de la carga de trabajo al elegir el tipo de equilibrador de carga.
-
No se aprovechan las características del equilibrador de carga para optimizar el rendimiento.
-
La carga de trabajo se expone directamente a Internet sin un equilibrador de carga.
-
Enruta todo el tráfico de Internet a través de los equilibradores de carga existentes.
-
Utiliza el equilibrio de carga TCP genérico y hace que cada nodo de computación gestione el cifrado SSL.
Beneficios de establecer esta práctica recomendada: un equilibrador de carga gestiona la carga variable del tráfico de la aplicación en una única zona de disponibilidad o en varias zonas de disponibilidad y facilita una alta disponibilidad, un escalamiento automático y una mejor utilización de la carga de trabajo.
Nivel de riesgo expuesto si no se establece esta práctica recomendada: alto
Guía para la implementación
Los equilibradores de carga actúan como punto de entrada de la carga de trabajo y, a partir de ahí, distribuyen el tráfico a los destinos de backend, como instancias de computación o contenedores, para mejorar la utilización.
La elección del tipo de equilibrador de carga adecuado es el primer paso para optimizar su arquitectura. Comience por enumerar las características de su carga de trabajo, como el protocolo (por ejemplo, TCP, HTTP, TLS o WebSockets), el tipo de destino (como instancias, contenedores o sin servidor), los requisitos de la aplicación (como conexiones de larga duración, autenticación de usuarios o permanencia) y la ubicación (como región, Local Zone, Outpost o aislamiento zonal).
AWS le ofrece varios modelos para que sus aplicaciones utilicen el equilibrio de carga. Application Load Balancer es el más adecuado para el equilibrio de carga del tráfico de HTTP y HTTPS y entrega un enrutamiento de solicitudes avanzado centrado en la entrega de arquitecturas de aplicaciones modernas, incluidos los microservicios y los contenedores.
Network Load Balancer es el más adecuado para el equilibrio de carga del tráfico de TCP en donde se necesite un rendimiento extremo. Es capaz de gestionar millones de solicitudes por segundo manteniendo latencias ultrabajas, y está optimizado para manejar patrones de tráfico repentinos y volátiles.
Elastic Load Balancing
Una vez elegido el equilibrador de carga adecuado, puede empezar a utilizar sus características para reducir el esfuerzo que debe realizar su backend para atender al tráfico.
Por ejemplo, al utilizar tanto Application Load Balancer (ALB) como Network Load Balancer (NLB), puede realizar la descarga de cifrado SSL/TLS, lo que da la oportunidad de evitar que sus destinos completen el establecimiento de comunicación TLS, que consume mucha CPU, y también para mejorar la administración de certificados.
Cuando configura la descarga SSL/TLS en el equilibrador de carga, este se ocupa del cifrado del tráfico desde y hacia los clientes, al tiempo que entrega el tráfico sin cifrar a sus backends, lo que libera recursos de backend y mejora el tiempo de respuesta para los clientes.
Application Load Balancer también puede atender el tráfico HTTP/2 sin necesidad de soporte en sus destinos. Esta simple decisión puede mejorar el tiempo de respuesta de su aplicación, ya que HTTP/2 utiliza las conexiones TCP de forma más eficiente.
Los requisitos de latencia de la carga de trabajo deben tenerse en cuenta a la hora de definir la arquitectura. Por ejemplo, si tiene una aplicación sensible a la latencia, puede decidir utilizar Network Load Balancer, que ofrece latencias extremadamente bajas. Como alternativa, puede decidir acercar su carga de trabajo a sus clientes con Application Load Balancer en zonas locales de AWS
Otra consideración para las cargas de trabajo sensibles a la latencia es el equilibrio de carga entre zonas. Con el equilibrio de carga entre zonas, cada nodo del equilibrador de carga distribuye el tráfico entre los destinos registrados en todas las zonas de disponibilidad permitidas.
Utilice Auto Scaling integrado con su equilibrador de carga. Uno de los aspectos clave de un sistema con un rendimiento eficiente tiene que ver con el redimensionamiento correcto de sus recursos de backend. Para ello, puede utilizar las integraciones del equilibrador de carga para los recursos de destino de backend. Mediante la integración del equilibrador de carga con los grupos de Auto Scaling, los destinos se añadirán o eliminarán del equilibrador de carga según sea necesario y en respuesta al tráfico entrante. Los equilibradores de carga también pueden integrarse con Amazon ECS y Amazon EKS para cargas de trabajo en contenedores.
Pasos para la implementación
-
Defina sus requisitos de equilibrio de carga, incluidos el volumen de tráfico, la disponibilidad y la escalabilidad de las aplicaciones.
-
Elija el tipo de equilibrador de carga adecuado para su aplicación.
-
Utilice Application Load Balancer para cargas de trabajo HTTP/HTTPS.
-
Utilice Network Load Balancer para cargas de trabajo distintas de HTTP que se ejecuten en TCP o UDP.
-
Utilice una combinación de ambos (ALB como destino de NLB
) si desea aprovechar las características de ambos productos. Por ejemplo, puede hacerlo si desea utilizar las IP estáticas de NLB junto con el enrutamiento basado en encabezado HTTP de ALB, o si desea exponer su carga de trabajo HTTP a una AWS PrivateLink. -
Para obtener una comparación completa de los equilibradores de carga, consulte la comparación de productos de ELB
.
-
-
Utilice la descarga SSL/TLS si es posible.
-
Configure los agentes de escucha HTTPS/TLS con Application Load Balancer y Network Load Balancer integrados con AWS Certificate Manager
. -
Tenga en cuenta que algunas cargas de trabajo pueden requerir cifrado de extremo a extremo por motivos de conformidad. En este caso, es un requisito permitir el cifrado en los destinos.
-
Para conocer las prácticas recomendadas de seguridad, consulte SEC09-BP02 Aplicar el cifrado en tránsito.
-
-
Seleccione el algoritmo de enrutamiento adecuado (solo ALB).
-
El algoritmo de enrutamiento puede marcar la diferencia en el grado de utilización de sus destinos de backend y, por lo tanto, en su repercusión en el rendimiento. Por ejemplo, ALB proporciona dos opciones para los algoritmos de enrutamiento:
-
Solicitudes menos pendientes: utilice esta opción para lograr una mejor distribución de la carga a sus destinos de backend para los casos en que las solicitudes de la aplicación varíen en complejidad o los destinos varíen en capacidad de procesamiento.
-
Distribución: utilice esta otra opción cuando las solicitudes y los destinos sean similares, o si necesita distribuir las solicitudes equitativamente entre los destinos.
-
-
Considere el aislamiento entre zonas o zonal.
-
Desactive el aislamiento entre zonas (aislamiento zonal) para mejorar la latencia y los dominios de error zonal. Está desactivado de forma predeterminada en NLB. En ALB, puede desactivarlo por grupo de destino.
-
Active el aislamiento entre zonas para aumentar la disponibilidad y flexibilidad. Está activado de forma predeterminada en ALB. En NLB, puede activarlo por grupo de destino.
-
-
Active la conexión persistente HTTP para sus cargas de trabajo HTTP (solo ALB). Con esta característica, el equilibrador de carga puede reutilizar las conexiones de backend hasta que expire el tiempo de espera activo, lo que mejora el tiempo de solicitud y respuesta HTTP, además de reducir la utilización de recursos en los destinos de backend. Para obtener información detallada sobre cómo hacer esto para Apache y Nginx, consulte What are the optimal settings for using Apache or NGINX as a backend server for ELB?
-
Active la supervisión de su equilibrador de carga.
-
Active los registros de acceso para su Application Load Balancer y Network Load Balancer.
-
Los principales campos a tener en cuenta para ALB son
request_processing_time
,request_processing_time
yresponse_processing_time
. -
Los principales campos a tener en cuenta para NLB son
connection_time
ytls_handshake_time
. -
Esté preparado para consultar los registros cuando los necesite. Puede utilizar Amazon Athena para consultar tanto los registros de ALB como los registros de NLB.
-
Cree alarmas para las métricas relacionadas con el rendimiento, como
TargetResponseTime
para ALB.
-
Recursos
Documentos relacionados:
Vídeos relacionados:
-
AWS re:Invent 2023: What can networking do for your application?
-
AWS re:Inforce 20: How to use Elastic Load Balancing to enhance your security posture at scale
-
AWS re:Invent 2018: Elastic Load Balancing: Deep Dive and Best Practices
-
AWS re:Invent 2021 - How to choose the right load balancer for your AWS workloads
-
AWS re:Invent 2019: Get the most from Elastic Load Balancing for different workloads
Ejemplos relacionados: