Load balancing avec HAProxy et Nginx

Load balancing avec HAProxy et Nginx

Le load balancing est une technique clé de la haute disponibilité. Il répartit les requêtes entre plusieurs serveurs pour maximiser performance et résilience. HAProxy et Nginx en sont les références open source.

Le principe

Un répartiteur de charge (load balancer) reçoit toutes les requêtes entrantes sur un point unique, puis les distribue entre plusieurs serveurs backend identiques. Du point de vue de l'utilisateur, le service semble unique et unifié. Du point de vue technique, la charge est répartie et les pannes sont transparentes.

HAProxy

HAProxy (High Availability Proxy) est un load balancer spécialisé, très performant. Il gère le trafic TCP/HTTP, peut absorber des millions de requêtes par seconde, et offre une configuration fine. Utilisé par GitHub, Instagram, Reddit. Léger, éprouvé, documenté.

Nginx

Nginx est à l'origine un serveur web, mais fait aussi très bien office de load balancer. Avantage : un seul logiciel sert à la fois le contenu statique, le SSL termination, la compression et le load balancing. Idéal pour les configurations simples à moyennes. Nginx Plus (version payante) ajoute des fonctionnalités enterprise.

Les algorithmes de répartition

Round Robin : rotation équitable entre les serveurs (simple et souvent efficace). Least Connections : envoie vers le serveur avec le moins de connexions actives (meilleur en cas de requêtes de durées variables). IP Hash : même IP toujours vers le même serveur (utile pour les sessions non partagées). Weighted : serveurs avec des capacités différentes.

Les health checks

Le load balancer vérifie régulièrement la santé de chaque backend (par exemple, toutes les 5 secondes). Si un serveur ne répond pas ou répond avec une erreur, il est retiré automatiquement du pool. Sa restauration automatique est aussi gérée dès qu'il redevient sain.

La persistance de session

Certaines applications stockent l'état utilisateur localement (mauvaise pratique moderne). Dans ce cas, le load balancer doit envoyer chaque utilisateur toujours vers le même serveur. Cookie de session, IP stickiness sont les techniques disponibles. Mieux vaut concevoir des applications stateless.

Le SSL termination

Le load balancer peut traiter le SSL/TLS avant de transmettre en clair aux serveurs backend. Avantage : centraliser la gestion des certificats, décharger les backends. Inconvénient : le trafic interne n'est pas chiffré. Le chiffrement de bout en bout reste préférable pour les données sensibles.

Architecture typique

Deux load balancers en actif-passif (ou actif-actif), chacun redondé, devant N serveurs applicatifs. Les LB eux-mêmes sont exposés via une IP flottante qui bascule en cas de panne. Pour approfondir, consultez notre article failover et cluster actif-passif.

Kubernetes et les services cloud

Dans un environnement cloud, le load balancing est souvent un service managé (AWS ELB/ALB, GCP Load Balancer, Azure Load Balancer). Kubernetes intègre ses propres mécanismes (Services, Ingress). Dans ces contextes, HAProxy reste utile pour des besoins spécifiques, mais moins central. Pour plus d'informations, consultez notre article haute disponibilité et redondance et notre guide complet.