Définition
Un load balancer (repartiteur de charge) est un composant réseau qui distribue le trafic entrant entre plusieurs serveurs pour optimiser les performances, maximiser la disponibilité et éviter la surcharge d'un serveur unique.
C'est un élément essentiel de toute architecture web a haute disponibilité. Sans load balancer, un seul serveur recevrait tout le trafic, créant un point de defaillance unique (SPOF).
Pourquoi utiliser un load balancer ?
- Performance : repartit la charge pour des temps de réponse optimaux
- Disponibilité : si un serveur tombe, le trafic est redirige vers les autres
- Scalabilité : ajoutez des serveurs sans changer la configuration
- Sécurité : point unique pour le SSL termination, le rate limiting et le WAF
Types de load balancers
Layer 4 (Transport — TCP/UDP)
Opère au niveau TCP/UDP. Redirige en fonction de l'IP source/destination et du port. Très rapide car ne lit pas le contenu des requêtes.
Layer 7 (Application — HTTP/HTTPS)
Opère au niveau HTTP. Peut rediriger en fonction de l'URL, des headers, des cookies ou du contenu. Plus intelligent mais legèrement plus lent.
# Exemple Nginx comme load balancer L7
upstream backend {
server 10.0.0.1:3000 weight=3;
server 10.0.0.2:3000 weight=1;
server 10.0.0.3:3000 backup;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Algorithmes de répartition
| Algorithme | Description | Cas d'usage |
|---|---|---|
| Round Robin | Chaque serveur a tour de rôle | Serveurs homogenes |
| Weighted Round Robin | Poids différents par serveur | Serveurs heterogenes |
| Least Connections | Serveur avec le moins de connexions actives | Requêtes de durée variable |
| IP Hash | Même IP client → même serveur | Sessions sticky |
| Random | Serveur aleatoire | Simple, bonne distribution |
Health checks
Le load balancer vérifie régulièrement que chaque serveur est opérationnel :
- TCP check : la connexion TCP reussit-elle ?
- HTTP check : le endpoint
/healthretourne-t-il un 200 ? - Custom check : vérification métier spécifique
Si un serveur echoue au health check, il est retire du pool automatiquement.
Solutions courantes
- Cloud : AWS ALB/NLB, GCP Load Balancer, Azure Load Balancer
- On-premise : Nginx, HAProxy, Traefik, Envoy
- DNS-based : Cloudflare, Route 53 (répartition géographique)