Un load balancer (répartiteur de charge) est un composant réseau qui distribue le trafic entrant entre plusieurs serveurs ou instances backend. Son objectif : améliorer la disponibilité, les performances et la tolérance aux pannes d’une application.

Rôle principal

ObjectifMécanisme
DisponibilitéHealth checks continus — si un backend tombe, le trafic est redirigé vers les backends sains
ScalabilitéLes backends peuvent être ajoutés ou retirés sans interruption de service
PerformanceLa charge est répartie pour éviter la saturation d’un seul serveur
Tolérance aux pannesAucun single point of failure côté backend

L4 vs L7 : les deux grandes familles

CritèreLoad Balancer L4 (Transport)Load Balancer L7 (Application)
Couche OSICouche 4 (TCP/UDP)Couche 7 (HTTP/HTTPS)
Décision basée surIP source/destination + portURL, méthode HTTP, headers, cookies
Inspection du contenuNon — flux TCP/UDP opaqueOui — décode le protocole applicatif
Terminaison TLSPass-through ou TLS offloadingTLS offloading natif
Fonctionnalités avancéesRapide, simple, universelRoutage par path/host, réécriture URL, WAF, sticky sessions
Exemple AWSNLB (Network Load Balancer)ALB (Application Load Balancer)
Exemple KubernetesService type: LoadBalancer + kube-proxyIngress Controller (nginx, traefik, etc.)

Algorithmes de répartition

AlgorithmeDescriptionCas d’usage
Round RobinChaque requête → backend suivant en rotationServeurs homogènes, requêtes de durée similaire
Least ConnectionsVers le backend avec le moins de connexions activesRequêtes de durée variable (long polling, WebSocket)
IP HashHash de l’IP source → backend fixe (session sticky)Applications avec état de session
Weighted Round RobinPoids par backend (ex. 70% / 30%)Backends de capacités différentes
RandomSélection aléatoireSimple, scalable sur gros clusters
Least Response TimeBackend avec le temps de réponse le plus courtApplications sensibles à la latence

Health Checks

Le load balancer sonde régulièrement chaque backend pour détecter les pannes :

# Exemple de configuration health check (AWS ALB)
healthCheckProtocol: HTTP
healthCheckPath: /health
healthCheckIntervalSeconds: 30
healthyThresholdCount: 2      # 2 succès consécutifs → backend sain
unhealthyThresholdCount: 3    # 3 échecs consécutifs → backend retiré du pool

Types AWS

TypeCoucheProtocolesCas d’usage
ALB (Application LB)L7HTTP, HTTPS, WebSocketAPIs REST, microservices, routage par path/host
NLB (Network LB)L4TCP, UDP, TLSHautes performances, IP statique, non-HTTP
CLB (Classic LB)L4/L7HTTP, HTTPS, TCPLegacy uniquement (déprécié)
GWLB (Gateway LB)L3IPInspection de trafic via appliances tierces (firewall, IDS)

Schéma de fonctionnement

Client
  ↓
[ Load Balancer ] ← health checks continus
  ├── Backend 1  (sain ✅)
  ├── Backend 2  (sain ✅)
  └── Backend 3  (défaillant ❌ → exclu du pool)

En relation avec

  • DNS — le load balancer est exposé via un enregistrement DNS (ex. A ou CNAME vers le LB)
  • Internet Gateway (IGW) — un load balancer public (ALB/NLB) est accessible via l’IGW
  • TLS et SSL — le trafic entre le LB et les backends peut être sécurisé via mTLS
  • kube-proxy — dans Kubernetes, kube-proxy assure le load balancing L4 interne (Services ClusterIP)
  • Reverse Proxy — le LB L7 est souvent aussi un reverse proxy (routage par path/host, TLS offloading)