Annonce de l’équilibrage de charge UDP dans NGINX et NGINX Plus

NGINX | 15 mars 2016

Nous sommes fiers d’annoncer l’ajout d’une nouvelle fonctionnalité prometteuse à NGINX Open Source et à notre plateforme de mise à disposition d’applications, NGINX Plus : l’équilibrage de charge UDP. Cette nouvelle fonctionnalité vient compléter nos capacités TCP et HTTP existantes, faisant de NGINX une interface puissante, facile à utiliser et cohérente pour un éventail encore plus large d’applications et d’appareils connectés à Internet. Nous sommes ravis d’étendre les capacités d’équilibrage de charge qui alimentent plus de la moitié des applications les plus sollicitées au monde à une nouvelle catégorie d’utilisateurs qui développent l’Internet des objets (IoT).

Pourquoi ajouter la prise en charge de la répartition de charge UDP ?

La plupart des applications Internet utilisent HTTP pour les communications réseau. Des protocoles avancés comme SOAP et REST reposent sur HTTP et peuvent ainsi bénéficier de nombreuses extensions avancées : sécurisation avec TLS, compression avec Gzip et amélioration des performances grâce à HTTP/2.

Néanmoins, de nombreuses applications doivent utiliser plusieurs protocoles à des fins différentes, et bon nombre des principaux protocoles Internet sont antérieurs à HTTP. C’est pourquoi une solution complète d’équilibrage de charge et de proxy inverse doit prendre en charge un large éventail de protocoles, qu’ils reposent sur TCP ou sur UDP.

UDP est couramment utilisé pour les protocoles légers qui ne sont pas de nature transactionnelle, tels que DNS (utilisé pour résoudre les noms de domaine en adresses), syslog (utilisé pour la journalisation légère) et RADIUS (utilisé pour l’authentification). Ces protocoles n’ont pas d’exigences strictes en matière de fiabilité : si un message UDP (datagramme) est perdu, le client peut le renvoyer sans risque après un délai d’attente. Toutefois, les services qu’ils fournissent sont essentiels au bon fonctionnement des services Internet. UDP s’impose également comme l’un des protocoles de prédilection pour les nouvelles applications IoT en raison de ses faibles besoins en bande passante.

Il y a un an, NGINX a lancé l’équilibrage de charge TCP auprès de sa communauté d’utilisateurs et de ses clients professionnels. Nous sommes aujourd’hui heureux d’étendre nos capacités d’équilibrage de charge avec l’ajout de l’équilibrage de charge UDP. Avec NGINX et NGINX Plus, les utilisateurs peuvent désormais fournir des services basés sur UDP avec fiabilité, évolutivité et performances.

Comment fonctionne la répartition de charge UDP ?

NGINX écoute le trafic réseau UDP (protocoles tels que DNS, syslog et RADIUS) sur une ou plusieurs adresses (adresse IP et port), selon la configuration définie par l’administrateur. Ces adresses sont publiées afin que les clients sachent où envoyer leurs requêtes pour le service souhaité.

Comme pour la répartition de charge HTTP et TCP, la configuration de la répartition de charge UDP définit un groupe en amont – l’ensemble des serveurs d’origine qui fournissent le service basé sur UDP – ainsi que l’algorithme à utiliser pour répartir le trafic entre les serveurs (par exemple, Round Robin, Least Connections ou un hachage basé sur l’adresse IP source). La configuration définit également un serveur virtuel pour chaque port UDP, avec une directive proxy_pass qui désigne le groupe en amont fournissant le service associé :

# 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;
    }
}

Lorsque NGINX reçoit un datagramme UDP sur un port (ici, une requête DNS sur le port 53), il utilise l’algorithme d’équilibrage de charge configuré (ici, l’algorithme Round Robin par défaut) pour sélectionner le serveur du groupe en amont qui le traitera. Le cas échéant, NGINX attend une réponse du serveur, puis transmet cette réponse (ainsi que tous les paquets ultérieurs reçus avant l’expiration du délai) au client.

Si un serveur ne répond pas à une requête, NGINX le marque comme « défaillant » et cesse temporairement de lui envoyer des datagrammes. Toutes les quelques secondes, NGINX vérifie l’état du serveur afin de déterminer s’il est de nouveau opérationnel en lui envoyant une petite quantité de trafic réel.

NGINX Plus R9 intégrera des contrôles d’intégrité applicatifs (également appelés « asynchrones » ou « synthétiques ») pour les services UDP, similaires à ceux utilisés pour le trafic HTTP et TCP. Vous pourrez configurer NGINX Plus afin d’envoyer des requêtes UDP spécifiques aux serveurs en amont et définir le type de réponse que les serveurs devront renvoyer pour être considérés comme opérationnels.

Parmi les autres fonctionnalités prises en charge avec l’équilibrage de charge UDP figurent la journalisation des transactions dans un journal d’accès de type serveur web, les listes de contrôle d’accès basées sur les adresses IP et diverses fonctionnalités de limitation du débit.

Dans NGINX Plus R9, les statistiques de surveillance de l’activité en temps réel fournies par le module Status incluront des métriques UDP, et vous pourrez reconfigurer à la volée les groupes de serveurs UDP en amont, à l’aide d’une API HTTP et du DNS, comme vous pouvez actuellement le faire pour les serveurs HTTP et TCP.

Cas d’usage de l’équilibrage de charge UDP

L’équilibrage de charge UDP répond à deux cas d’usage principaux : la haute disponibilité et la mise à l’échelle horizontale. De par sa conception, UDP ne garantit pas la transmission des données de bout en bout. Le logiciel client doit donc gérer les erreurs au niveau du réseau et les retransmissions. Les protocoles basés sur UDP définissent généralement une paire de serveurs. Si un client ne parvient pas à se connecter à son serveur préféré, il doit attendre l’expiration d’un délai défini avant d’essayer l’autre serveur. Cela peut entraîner des délais importants dans les transactions UDP.

Le déploiement de NGINX ou NGINX Plus en tant que répartiteur de charge hautement disponible et fiable devant vos serveurs UDP peut éliminer ou réduire ce type de délai. Les clients envoient des requêtes UDP au répartiteur de charge NGINX ou NGINX Plus, qui surveille l’état et la disponibilité des serveurs UDP et n’envoie aucune requête aux serveurs défaillants ou surchargés. Les clients ne subissent ainsi aucun échec de connexion ou de requête, ni les délais d’expiration liés aux nouvelles tentatives.

L’utilisation de NGINX ou NGINX Plus comme équilibreur de charge permet également de faire évoluer une application UDP afin qu’elle puisse gérer un trafic important. Dans un déploiement UDP classique, les clients ne connaissent généralement pas plus de deux serveurs UDP, mais répondre à une forte demande nécessite d’en ajouter beaucoup d’autres. Dans ce scénario, les clients envoient leurs requêtes UDP à la ou aux deux instances NGINX ou NGINX Plus connues, qui répartissent les requêtes entre les nombreux serveurs UDP réellement nécessaires pour gérer la charge.

La répartition de charge UDP avec NGINX et NGINX Plus convient à toute application basée sur UDP qui envoie des données et attend éventuellement une ou plusieurs réponses. NGINX peut également répartir la charge de protocoles propriétaires basés sur UDP, tels que ceux utilisés dans les environnements IoT.

Bien démarrer

Le calendrier précis de disponibilité de l’équilibrage de charge UDP dans nos différentes versions est le suivant :

  • Aujourd’hui, nous avons publié la première version du code d’équilibrage de charge UDP dans le dépôt open source du logiciel NGINX. Les utilisateurs précoces et les personnes souhaitant tester notre implémentation peuvent cloner le code source et compiler un binaire NGINX prenant en charge l’équilibrage de charge UDP. Vos retours sont les bienvenus sur la liste de diffusion nginx.
  • Semaine du 28 mars 2016 – La version 1.9.13 de NGINX sera publiée et prendra en charge la répartition de charge UDP (tout comme les binaires précompilés basés sur cette version).
  • Avril 2016 – NGINX Plus Release 9 (R9) inclura l’équilibrage de charge UDP. NGINX Plus, notre plateforme commerciale de mise à disposition d’applications, enrichira les fonctionnalités d’équilibrage de charge UDP de la version open source avec des fonctions supplémentaires permettant de déployer et de surveiller des services basés sur UDP fiables et évolutifs.

NGINX et NGINX Plus offrent une plateforme complète d’équilibrage de charge et de mise à disposition d’applications pour un large éventail de protocoles Internet. Que vous proposiez des applications HTTP, des applications TCP de plus bas niveau ou des protocoles UDP, vous pouvez compter sur NGINX et NGINX Plus pour assurer haute disponibilité, fiabilité, évolutivité et performances au sein d’une seule application légère. Nous sommes très enthousiastes à l’idée de proposer cette nouvelle fonctionnalité d’équilibrage de charge UDP et de voir son potentiel pour offrir un équilibrage de charge hautes performances et une mise à disposition irréprochable des applications à une toute nouvelle gamme d’appareils.

Vous souhaitez vous familiariser avec NGINX Plus avant l’arrivée de l’équilibrage de charge UDP dans la version 9 ? Commencez dès aujourd’hui votre essai gratuit de 30 jours ou contactez-nous pour discuter de vos cas d’utilisation.


Partager

À propos de l’auteur

Articles de blog associés

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA
NGINX | 13/10/2025

Tendances actuelles des technologies cloud natives, de l’ingénierie de plateforme et de l’IA

Découvrez les principaux enseignements tirés des réponses à l’enquête annuelle F5 NGINX sur les dernières tendances en matière de technologies cloud natives, de sécurité, d’ingénierie de plateforme et d’IA.

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?
NGINX | 03/11/2023

Quels contrôleurs Ingress NGINX sont affectés par les vulnérabilités CVE-2022-4886, CVE-2023-5043 et CVE-2023-5044 ?

Lorsque de nouvelles CVE sont signalées, il est facile de ne plus savoir si elles concernent un outil de contrôleur Ingress NGINX particulier, car il existe plusieurs projets. Cet article présente les CVE et explique comment distinguer les différents projets de contrôleurs Ingress afin de dissiper toute confusion.

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX
NGINX | 11/03/2020

Votre API est-elle en temps réel ? Testez sa latence avec l’outil rtapi de NGINX

Votre API répond-elle aux requêtes en moins de 30 ms ? Si ce n’est pas le cas, il ne s’agit pas d’une API en temps réel offrant la faible latence exigée par la grande majorité des organisations. Mesurez la latence de votre API avec l’outil rtapi de NGINX et découvrez comment NGINX peut l’aider à offrir une réactivité en temps réel.

Un testeur d’expressions régulières pour NGINX et NGINX Plus
NGINX | 11/06/2019

Un testeur d’expressions régulières pour NGINX et NGINX Plus

Le testeur d’expressions régulières (regex) pour NGINX et NGINX Plus vous évite de tâtonner en vous indiquant si une expression régulière utilisée dans un bloc location ou map correspond aux valeurs comme prévu. Il génère la configuration appropriée et affiche les valeurs des groupes de capture.

Caches partagés avec les clusters de cache NGINX Plus, partie 1
NGINX | 24/01/2017

Caches partagés avec les clusters de cache NGINX Plus, partie 1

Optimisez la capacité de votre cache web en le répartissant entre plusieurs serveurs de cache web NGINX ou NGINX Plus. Découvrez comment procéder dans cet article.

Introduction aux microservices
NGINX | 19/05/2015

Introduction aux microservices

Les microservices suscitent actuellement beaucoup d’intérêt. Cet article de blog est le premier d’une série de sept consacrée à la conception, au développement et au déploiement de microservices.