L = λ × W
L'équation la plus utile en planification de capacité
Pour toute file d'attente stable, quelle que soit sa structure interne : L = λ × W, où :
- L = nombre moyen d'éléments dans le système (en cours de traitement ou en attente)
- λ (lambda) = taux d'arrivée moyen (éléments par unité de temps)
- W = temps moyen que chaque élément passe dans le système
Lecture géométrique : tracer λ sur un axe et W sur l'autre. Le produit L est la surface du rectangle qu'ils forment. La planification de la capacité se situe à l'intérieur de ce rectangle.
Pourquoi c'est important : deux des trois grandeurs déterminent la troisième. Mesurer le débit et la latence, on connaît l'occupation. Mesurer l'occupation et le débit, on connaît la latence. La loi est robuste : elle s'applique aux requêtes web, aux tables de restaurant, aux files d'attente des supermarchés et aux pipelines CPU sans modification.
Trois exemples concrets :
- Un service web gère 200 req/s avec une latence moyenne de 50 ms (0,05 s). L = 200 × 0,05 = 10 requêtes en cours.
- Un café sert 60 clients/heure avec un temps de séjour moyen de 15 minutes (0,25 h). L = 60 × 0,25 = 15 clients à l'intérieur.
- Un pool backend gère 1500 req/s avec une latence moyenne de 200 ms (0,2 s). L = 1500 × 0,2 = 300 requêtes en cours.
Implication pour le dimensionnement : le nombre de workers / threads / connexions d'une couche doit être au moins égal à L pour suivre la demande. Tout ce qui est en dessous entraîne une croissance de la file d'attente.
Pourquoi la latence explose au-delà de 80 % de taux d'utilisation
La courbe la plus importante en opérations
Tracez le taux d'utilisation sur l'axe des x (de 0 % à 100 %) et le temps d'attente moyen sur l'axe des y. La forme de cette courbe est l'une des plus déterminantes dans la planification de la capacité.
Le modèle de file d'attente M/M/1 : pour un système avec des arrivées de Poisson (aléatoires) et des temps de service exponentiels (aléatoires), le temps d'attente moyen est :
W_q = ρ / (μ × (1 - ρ))
où ρ est le taux d'utilisation (de 0 à 1) et μ est le taux de service.
La forme de la courbe :
- À ρ = 0,5 (50 % de taux d'utilisation), le temps d'attente est faible (1 temps de service).
- À ρ = 0,7 (70 % d'utilisation), le temps d'attente est d'environ 2,3 fois le temps de service.
- À ρ = 0,8 (80 % d'utilisation), le temps d'attente est d'environ 4 fois le temps de service.
- À ρ = 0,9 (90 % d'utilisation), le temps d'attente est d'environ 9 fois le temps de service.
- À ρ = 0,95 (95 % d'utilisation), le temps d'attente est d'environ 19 fois le temps de service.
- À ρ = 1,0 (100 % d'utilisation), le temps d'attente est infini.
Le point d'inflexion : autour de 80 % d'utilisation, la courbe s'infléchit brusquement. En dessous de ce point, la capacité est confortable ; au-dessus, la latence augmente plus rapidement que l'utilisation.
Interprétation pratique : visez 70 % d'utilisation pour l'état stationnaire, jamais 100 %. Les 30 % de « marge » ne sont pas un gaspillage ; c'est le prix à payer pour une latence bornée.
Dimensionnement au-delà du point d'inflexion
Deux scénarios :
Scénario A : 10 répliques fonctionnant à 60 % de CPU. Latence p99 = 100 ms.
Scénario B : même flotte fonctionnant à 90 % de CPU en raison de la croissance du trafic. p99 = 600 ms.
Même flotte, même code, seule l'utilisation a changé.
Dimensionnement et déclenchement combinés
Synthèse
Vous pouvez désormais appliquer la loi de Little comme un rectangle, lire la courbe de file d'attente et son point d'inflexion, et relier les deux aux décisions de capacité.
Appliquez les deux.
Une couche backend gère 2 000 req/s avec une latence moyenne de 50 ms par réplique, pour une capacité de 80 req/s à 70 % de CPU. Facteur de pic de 2x ; vous souhaitez survivre à 3 pannes de répliques simultanées.
Notes complémentaires
Notes complémentaires
Cette leçon de géométrie réinterprète la leçon principale Mise à l'échelle horizontale sans état sous forme de géométrie quantitative.
Le prochain compagnon, geometry_of_ingress_egress_separation, réinterprète la séparation de la frontière réseau comme un graphe biparti avec un sommet de coupure que la séparation supprime.
Bravo.