DataManip Insights ÉPISODE 1Architecture & SystèmesGratuit
🏗️ Épisode 1 · Répartiteur de charge

« Quatre serveurs, donc quatre fois plus rapide. »
Seulement si on répartit bien.

Un répartiteur de charge envoie chaque requête vers l'un des serveurs. Le tourniquet est parfait quand toutes les requêtes se ressemblent. Dès que certaines sont longues, il en empile derrière un serveur occupé pendant que d'autres restent libres, et le temps de réponse des 1 % les plus lents explose.

🎯 L'analogie clé

Une grande surface avec quatre caisses. Si un panier est énorme, la file derrière lui s'allonge. Envoyer chaque client à la caisse suivante dans l'ordre ne tient pas compte du panier ; envoyer chacun à la file la plus courte, si.

Le principe

Trois rôles proches,
trois politiques de répartition.

Le reverse proxy reçoit le trafic à la place des serveurs, la passerelle d'API ajoute authentification et limites, le répartiteur choisit le serveur. Une même machine cumule souvent les trois rôles ; seul le choix du serveur nous intéresse ici.

🔄
Tourniquet
Chaque serveur reçoit son tour. Simple et sans état, parfait si les requêtes durent toutes autant.
🎲
Au hasard
Un serveur tiré au sort. Sans coordination, mais des rafales tombent parfois sur le même serveur.
⚖️
Moins de requêtes en cours
On choisit le serveur qui traite le moins de requêtes. Il faut connaître l'état des serveurs, mais il s'adapte aux requêtes longues.
Le point clé : la politique ne change presque rien si les requêtes durent toutes la même durée, et change beaucoup si leurs durées sont dispersées.
À vous de manipuler

Comparez les politiques
sous charge.

On simule 20 000 requêtes qui arrivent au hasard sur K serveurs. Une requête dure en moyenne 50 ms. Réglez la charge, la dispersion des durées et le nombre de serveurs, et regardez le temps de réponse des 1 % les plus lents (p99).

Temps de réponse selon la politique
Temps de réponse moyen et p99 par politique (ms)

Les trois politiques voient exactement les mêmes arrivées et les mêmes durées. Les durées suivent une loi log-normale de moyenne 50 ms ; la dispersion 0 donne des requêtes identiques.

p99 tourniquet
-
ms
p99 au hasard
-
ms
p99 moins chargé
-
ms
Gain du moins chargé
-
p99 du tourniquet divisé par celui du moins chargé
À retenir : avec 4 serveurs chargés à 70 % et des durées dispersées, le p99 est de 524 ms en tourniquet, 734 ms au hasard et 341 ms en envoyant vers le serveur le moins chargé. Avec des requêtes identiques, tourniquet et moins chargé sont à égalité (133 et 146 ms).
Sous charge croissante

Plus on charge,
plus le choix compte.

À faible charge, tous les serveurs sont souvent libres et la politique importe peu. Près de la saturation, une mauvaise répartition crée des files que rien ne résorbe. On rejoue la simulation pour des charges de 30 % à 95 %.

p99 selon la charge
p99 selon la charge des serveurs (ms, le point est le réglage actuel)

Chaque point est une simulation de 10 000 requêtes avec les mêmes réglages de dispersion et de nombre de serveurs. Les valeurs fluctuent un peu d'un tirage à l'autre.

À 50 % de charge
-
p99 tourniquet · moins chargé
À 70 % de charge
-
p99 tourniquet · moins chargé
À 90 % de charge
-
p99 tourniquet · moins chargé
Tourniquet à 95 % / à 50 %
-
facteur d'augmentation du p99
Le point clé : à 50 % de charge le p99 est de 370 ms en tourniquet contre 281 ms pour le moins chargé. À 90 %, il atteint 1 648 ms contre 782 ms : l'écart se creuse. Entre 50 % et 95 % de charge, le p99 du tourniquet est multiplié par 7,6.
En pratique

Quatre réflexes
pour répartir la charge.

Voici comment choisir une politique, puis un exemple de configuration.

📏
Mesurez la dispersion des durées
Regardez la médiane et le p99 de vos requêtes. Un grand écart justifie une politique qui regarde la charge.
📈
Surveillez le p99, pas la moyenne
La moyenne cache les files. L'utilisateur vit le p99, surtout quand une page appelle plusieurs services.
🛟
Gardez de la marge
Un parc chargé à 90 % n'a plus de réserve : un pic suffit. Visez 60 à 70 % en charge normale.
🩺
Vérifiez la santé des serveurs
Un serveur lent ou en panne doit sortir de la rotation (health check), sinon il absorbe des requêtes qu'il ne traite pas.
Python · nginx.conf
# nginx : envoyer vers le serveur ayant le moins de connexions actives
upstream api {
    least_conn;
    server 10.0.0.11:8000 max_fails=3 fail_timeout=10s;
    server 10.0.0.12:8000 max_fails=3 fail_timeout=10s;
    server 10.0.0.13:8000 max_fails=3 fail_timeout=10s;
    server 10.0.0.14:8000 max_fails=3 fail_timeout=10s;
}
server {
    listen 80;
    location / { proxy_pass http://api; proxy_next_upstream error timeout; }
}
Test rapide

Vérifiez votre compréhension.

Les requêtes de votre service durent de 5 ms à plusieurs secondes. Quelle politique de répartition choisissez-vous en priorité ?

Ce qu'il faut retenir

Épisode suivant

Cache : taux de réussite et durée de vie

Un cache évite de recalculer ce qui revient souvent : combien de données faut-il garder pour répondre vite à la plupart des requêtes ?

ACCÈS COMPLET

Cet épisode est gratuit. Les 282 autres t'attendent.

Statistiques, finance quantitative, machine learning, deep learning, LLM, agents IA, MLOps : 321 épisodes avec des simulateurs à manipuler, pas des vidéos.

99 € (+ TVA selon le pays) · accès à vie · remboursement possible sous 7 jours
Débloquer les 282 épisodes · 99 € J'ai déjà une clé de licence
FULL ACCESS

This episode is free. The other 282 are waiting for you.

Statistics, quantitative finance, machine learning, deep learning, LLMs, AI agents, MLOps: 321 interactive episodes with simulators to play with, not videos.

€99 (+ VAT depending on country) · lifetime access · 7-day refund
Unlock the 282 episodes · €99 I already have a license key