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.
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 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.
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).
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.
À 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 %.
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.
Voici comment choisir une politique, puis un exemple de configuration.
# 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; } }
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 ?
Statistiques, finance quantitative, machine learning, deep learning, LLM, agents IA, MLOps : 321 épisodes avec des simulateurs à manipuler, pas des vidéos.
Statistics, quantitative finance, machine learning, deep learning, LLMs, AI agents, MLOps: 321 interactive episodes with simulators to play with, not videos.