Presentamos el balanceo de carga UDP en NGINX y NGINX Plus

NGINX | 15 de marzo de 2016

Nos complace anunciar la incorporación de una nueva y emocionante funcionalidad a NGINX Open Source y a nuestra plataforma de entrega de aplicaciones, NGINX Plus: el balanceo de carga UDP. Esta nueva funcionalidad se suma a nuestras capacidades actuales de TCP y HTTP, lo que convierte a NGINX en un frontend potente, fácil de usar y coherente para una gama aún más amplia de aplicaciones y dispositivos de Internet. Nos entusiasma ampliar las capacidades de balanceo de carga que impulsan más de la mitad de las aplicaciones con más tráfico del mundo a un nuevo grupo de usuarios que desarrollan el Internet de las cosas (IoT).

¿Por qué añadir compatibilidad con el balanceo de carga UDP?

La mayoría de las aplicaciones de Internet dependen de HTTP para la comunicación de red. Los protocolos avanzados como SOAP y REST se basan en HTTP, que permite aprovechar diversas extensiones avanzadas: seguridad mediante TLS, compresión mediante Gzip y mejoras de rendimiento mediante HTTP/2.

No obstante, muchas aplicaciones necesitan utilizar varios protocolos para distintos fines, y muchos de los principales protocolos de Internet son anteriores a HTTP. Por este motivo, una solución completa de balanceo de carga y proxy inverso debe ser compatible con una amplia variedad de protocolos, tanto basados en TCP como en UDP.

UDP se utiliza habitualmente para protocolos ligeros que no son de naturaleza transaccional, como DNS (utilizado para resolver nombres de dominio en direcciones), syslog (utilizado para el registro ligero) y RADIUS (utilizado para la autenticación). Estos protocolos no tienen requisitos estrictos de fiabilidad: si se pierde un mensaje UDP (datagrama), el cliente puede volver a enviarlo de forma segura tras un tiempo de espera; sin embargo, los servicios que proporcionan son fundamentales para el correcto funcionamiento de los servicios de Internet. UDP también se está convirtiendo en uno de los protocolos preferidos para las nuevas aplicaciones de IoT debido a sus bajos requisitos de ancho de banda.

Hace un año, NGINX incorporó el balanceo de carga TCP para nuestra comunidad de usuarios y clientes comerciales. Ahora nos complace ampliar nuestras capacidades de balanceo de carga con la incorporación del balanceo de carga UDP. Con NGINX y NGINX Plus, los usuarios ya pueden ofrecer servicios basados en UDP con fiabilidad, escalabilidad y rendimiento.

¿Cómo funciona el balanceo de carga UDP?

NGINX escucha el tráfico de red UDP (protocolos como DNS, syslog y RADIUS) en una o varias direcciones (dirección IP y puerto), según lo definido por el administrador. Estas direcciones se publican para que los clientes sepan dónde enviar las solicitudes del servicio deseado.

Al igual que con el balanceo de carga HTTP y TCP, la configuración del balanceo de carga UDP define un grupo de servidores ascendentes —el conjunto de servidores de origen que proporcionan el servicio basado en UDP— y el algoritmo que se utilizará para balancear el tráfico entre los servidores (por ejemplo, round robin, menor número de conexiones o hash basado en la dirección IP de origen). La configuración también define un servidor virtual para cada puerto UDP, con una directiva proxy_pass que especifica el grupo de servidores ascendentes que proporciona el servicio asociado:

# Load balance UDP‑based DNS traffic across two serversstream {
    upstream dns_upstreams {
        server 192.168.136.130:53;
        server 192.168.136.131:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_upstreams;
        proxy_timeout 1s;
        proxy_responses 1;
        error_log logs/dns.log;
    }
}

Cuando NGINX recibe un datagrama UDP en un puerto (en este caso, una consulta DNS en el puerto 53), utiliza el algoritmo de balanceo de carga configurado (en este caso, Round Robin, el predeterminado) para seleccionar qué servidor del grupo de servidores upstream lo procesará. Cuando corresponde, NGINX espera una respuesta del servidor y reenvía dicha respuesta (así como cualquier paquete posterior recibido dentro del periodo de tiempo de espera) al cliente.

Si un servidor no responde a una solicitud, NGINX lo marca como «fallido» y deja de enviarle datagramas temporalmente. Cada pocos segundos, NGINX comprueba el estado del servidor enviándole una pequeña cantidad de tráfico real para determinar si se ha recuperado.

NGINX Plus R9 incluirá comprobaciones de estado de la aplicación (también llamadas «asíncronas» o «sintéticas») para los servicios UDP, similares a las del tráfico HTTP y TCP. Podrá configurar NGINX Plus para que envíe solicitudes UDP especiales a los servidores ascendentes y definir el tipo de respuesta que deben devolver para que se consideren en buen estado.

Otras funciones compatibles con el balanceo de carga UDP incluyen el registro de transacciones en un registro de acceso similar al de un servidor web, listas de control de acceso basadas en direcciones IP y diversas funciones de limitación de velocidad.

En NGINX Plus R9, las estadísticas de supervisión de la actividad en tiempo real proporcionadas por el módulo Status incluirán métricas de UDP, y podrá reconfigurar dinámicamente los grupos de servidores upstream UDP, mediante una API basada en HTTP y DNS, como ya puede hacer con los servidores HTTP y TCP.

Casos de uso del balanceo de carga UDP

El balanceo de carga UDP aborda dos casos de uso principales: la alta disponibilidad y el escalado horizontal. Por diseño, UDP no garantiza la entrega de datos de extremo a extremo, por lo que el software cliente debe gestionar los errores de red y las retransmisiones. Los protocolos basados en UDP suelen definir un par de servidores; si un cliente no puede conectarse a su servidor preferido, debe esperar durante un periodo de tiempo de espera determinado antes de probar con el otro servidor. Esto puede provocar retrasos considerables en las transacciones UDP.

Implementar NGINX o NGINX Plus como equilibrador de carga fiable y de alta disponibilidad delante de sus servidores UDP puede eliminar o reducir este tipo de retrasos. Los clientes envían solicitudes UDP al equilibrador de carga NGINX o NGINX Plus, que supervisa el estado y la disponibilidad de los servidores UDP y no envía solicitudes a servidores que han fallado o están sobrecargados. Los clientes no experimentan fallos de conexión ni de solicitud, por lo que no sufren los tiempos de espera asociados a los reintentos de las solicitudes.

El uso de NGINX o NGINX Plus como equilibrador de carga también permite escalar una aplicación UDP para gestionar un tráfico elevado. En una implementación UDP típica, los clientes conocen como máximo dos servidores UDP, pero para escalar y satisfacer una demanda elevada se necesitan muchos más servidores UDP. En este escenario, los clientes envían sus solicitudes UDP a una o dos instancias conocidas de NGINX o NGINX Plus, que distribuyen las solicitudes entre el mayor número de servidores UDP que realmente se necesitan para gestionar la carga.

El balanceo de carga UDP con NGINX y NGINX Plus es adecuado para cualquier aplicación basada en UDP que envíe datos y, opcionalmente, espere una o varias respuestas. NGINX también puede balancear la carga de protocolos propietarios basados en UDP, como los utilizados en entornos de IoT.

Primeros pasos

Las fechas concretas de disponibilidad del balanceo de carga UDP en nuestras versiones son las siguientes:

  • Hoy: hemos incorporado la primera versión del código de balanceo de carga UDP al repositorio de código abierto de software NGINX. Los primeros usuarios y quienes deseen probar nuestra implementación pueden clonar el código fuente y compilar un binario de NGINX con funciones de balanceo de carga UDP. Agradecemos sus comentarios en la lista de correo de nginx.
  • Semana del 28 de marzo de 2016: se publicará la versión 1.9.13 de NGINX, que incluirá el balanceo de carga UDP (al igual que los binarios precompilados basados en dicha versión).
  • Abril de 2016: NGINX Plus Release 9 (R9) incluirá el balanceo de carga UDP. NGINX Plus, nuestra plataforma comercial de entrega de aplicaciones, ampliará las funciones de balanceo de carga UDP de la versión de código abierto con funciones adicionales para crear y supervisar servicios basados en UDP fiables y escalables.

NGINX y NGINX Plus ofrecen una plataforma completa de balanceo de carga y entrega de aplicaciones para una amplia variedad de protocolos de Internet. Tanto si ofrece aplicaciones basadas en HTTP como aplicaciones TCP de bajo nivel o protocolos basados en UDP, puede confiar en NGINX y NGINX Plus para obtener alta disponibilidad, fiabilidad, escalabilidad y rendimiento en una única aplicación ligera. Estamos muy entusiasmados con la nueva función de balanceo de carga UDP y con su potencial para ofrecer balanceo de carga de alto rendimiento y una entrega de aplicaciones impecable a toda una nueva gama de dispositivos.

¿Quiere familiarizarse con NGINX Plus antes del lanzamiento del balanceo de carga UDP en la versión 9? Empiece hoy mismo su prueba gratuita de 30 días o póngase en contacto con nosotros para hablar sobre sus casos de uso.


Compartir

Sobre el autor

Artículos relacionados del blog

Únete a F5 NGINX en AppWorld 2024
NGINX | 04/01/2024

Únete a F5 NGINX en AppWorld 2024

Descubre las numerosas razones para asistir al evento insignia de F5, que incluirá un emocionante anuncio sobre la cartera de productos NGINX.

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source
NGINX | 26/09/2023

Rotación de certificados SSL/TLS sin reinicios en NGINX Open Source

La función de diccionario compartido permite configurar NGINX sin necesidad de reiniciarlo al renovar los certificados SSL/TLS.

Exposición de APIs en Kubernetes
NGINX | 10/03/2022

Exposición de APIs en Kubernetes

La unidad 2 de Microservices March 2022 se centra en cómo exponer tus API en Kubernetes. Aquí tienes enlaces a los recursos que necesitas: la retransmisión en directo del 14 de marzo, artículos de blog y otros recursos de preparación, y el laboratorio práctico «Protege las API de Kubernetes mediante la limitación de solicitudes».

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto
NGINX | 23/08/2021

NGINX Sprint 2.0: visión clara, código renovado y nuevos compromisos con el código abierto

Hoy, en NGINX Sprint 2.0, anunciamos cómo respaldaremos nuestra visión del futuro de las aplicaciones modernas con una mayor presencia en la comunidad de código abierto, incluida la participación en el proyecto comunitario Kubernetes, nuevos proyectos de software de código abierto y la arquitectura de referencia para aplicaciones modernas.

Presentamos NGINX Plus R22
NGINX | 09/06/2020

Presentamos NGINX Plus R22

NGINX Plus R22 incorpora nuevas funcionalidades, como la compatibilidad con OCSP para verificar la revocación de certificados en TLS mutuo, el uso de varios proveedores de identidad OIDC en una configuración, el seguimiento en tiempo real de la limitación de solicitudes y conexiones en el panel de NGINX Plus y mejoras en NGINX JavaScript.

Presentamos NGINX Plus R17
NGINX | 11/12/2018

Presentamos NGINX Plus R17

NGINX Plus R17 incorpora compatibilidad con la limitación de velocidad en dos fases y con TLS 1.3, la versión más reciente del protocolo Transport Layer Security. La configuración de OpenID Connect es más sencilla y NGINX ModSecurity WAF es el doble de rápido que antes. También se ha actualizado el módulo JavaScript de NGINX.