← Retour au portail

Fiche 3 - Répartition de charge (load balancing)

Comprendre les principes de la répartition de charge réseau et applicative : algorithmes, niveaux OSI concernés et solutions courantes.

Avancé — SISR 2ème année ⏱️ 20 min 📁 Réseau

🎯 Objectifs de la fiche

  1. Qu'est-ce que la répartition de charge ? — Définition, objectifs, lien avec la HA
  2. Niveaux d'intervention (L4 vs L7) — Répartition transport vs applicative
  3. Algorithmes de répartition — Round robin, least connections, pondéré...
  4. Vérification de l'état des serveurs — Health check, retrait automatique
  5. Solutions courantes — HAProxy, Nginx, solutions matérielles

Prérequis

Connaître les bases de la haute disponibilité (voir fiche précédente) et du modèle OSI. Cette fiche complète le Bloc 2 SISR 2ème année sur la disponibilité et la performance des services.

1. Qu'est-ce que la répartition de charge ?

La répartition de charge (load balancing) consiste à distribuer le trafic entrant entre plusieurs serveurs afin d'optimiser l'utilisation des ressources, d'améliorer les temps de réponse et d'éviter la surcharge d'un seul serveur.

BénéficeExplication
PerformanceLe trafic est réparti, évitant qu'un seul serveur ne sature
DisponibilitéSi un serveur tombe en panne, les autres continuent à traiter les requêtes
ScalabilitéAjouter un nouveau serveur au pool augmente facilement la capacité globale
Maintenance facilitéeUn serveur peut être retiré temporairement du pool pour maintenance sans interruption de service
ℹ️ La répartition de charge est un mécanisme clé de la haute disponibilité, mais elle répond aussi à un objectif de performance distinct : même sans panne, répartir la charge améliore les temps de réponse pour les utilisateurs.

2. Niveaux d'intervention — L4 vs L7

Niveau OSIType de répartitionCritère de décisionExemple d'usage
Couche 4 (Transport)Répartition L4Adresse IP et port source/destination uniquementRépartition rapide sans analyse du contenu applicatif
Couche 7 (Application)Répartition L7Contenu de la requête (URL, en-têtes HTTP, cookies)Répartir selon le chemin d'URL, gérer les sessions utilisateur
💡 La répartition L7 permet des décisions plus fines (par exemple, diriger /api/ vers un pool de serveurs et /images/ vers un autre) mais nécessite plus de ressources de traitement que la répartition L4, plus simple et plus rapide.

3. Algorithmes de répartition de charge

AlgorithmePrincipeCas d'usage adapté
Round RobinDistribution séquentielle, un serveur après l'autreServeurs de capacité équivalente
Round Robin pondéréDistribution proportionnelle à un poids attribué à chaque serveurServeurs de capacités différentes
Least ConnectionsEnvoie la requête au serveur ayant le moins de connexions activesRequêtes de durée variable
Least Response TimeEnvoie la requête au serveur répondant le plus rapidementOptimisation de la latence perçue
Hachage IP sourceLe même client est systématiquement dirigé vers le même serveurMaintien de session sans cookie
Exemple — Round Robin simple avec 3 serveurs (A, B, C) :

Requête 1 → Serveur A
Requête 2 → Serveur B
Requête 3 → Serveur C
Requête 4 → Serveur A (le cycle reprend)
Requête 5 → Serveur B
...

4. Vérification de l'état des serveurs — health check

Un répartiteur de charge doit vérifier en permanence que les serveurs du pool sont opérationnels avant de leur envoyer du trafic. C'est le rôle du health check (vérification de santé).

Type de health checkVérification effectuée
Vérification réseau (ping/TCP)Le serveur répond-il sur le réseau et sur le port concerné ?
Vérification HTTPUne requête HTTP sur une URL spécifique renvoie-t-elle un code de succès (200) ?
Vérification applicative avancéeL'application répond-elle correctement avec un contenu attendu (pas juste un code 200) ?
⚠️ Un serveur qui répond au ping mais dont l'application est en réalité défaillante (erreur applicative, base de données inaccessible) peut continuer à recevoir du trafic si le health check se limite à une simple vérification réseau. Un health check applicatif plus poussé est recommandé pour les services critiques.
Fonctionnement du retrait automatique :

1. Le répartiteur teste périodiquement chaque serveur (ex: toutes les 5 secondes)
2. Si un serveur échoue à N vérifications consécutives → il est retiré du pool
3. Le trafic est redirigé vers les serveurs restants, sans interruption visible
4. Le répartiteur continue de tester le serveur défaillant en arrière-plan
5. Dès que le serveur répond correctement à nouveau → il est réintégré au pool

5. Solutions courantes de répartition de charge

SolutionTypeParticularité
HAProxyLogiciel, open sourceTrès performant, répartition L4 et L7, très utilisé en production
NginxLogiciel, open sourceServeur web pouvant aussi agir comme reverse proxy/load balancer
TraefikLogiciel, open sourceConçu pour les environnements conteneurisés (Docker, Kubernetes)
Keepalived + VRRPLogiciel, open sourcePlutôt orienté haute disponibilité que répartition de charge pure
Load balancer matérielMatériel, commercialAppliances dédiées (F5, Citrix ADC) pour très gros volumes
Load balancer cloudService managéAWS ELB, Azure Load Balancer — gérés par le fournisseur cloud
🎯 Passer l'évaluation de cette fiche