L = λ × W
De meest nuttige vergelijking in capaciteitsplanning
Voor elke stabiele wachtrij, ongeacht de interne structuur: L = λ × W, waarbij:
- L = gemiddeld aantal items in het systeem (in behandeling of wachtend)
- λ (lambda) = gemiddelde aankomsttempo (items per tijdseenheid)
- W = gemiddelde tijd die elk item in het systeem doorbrengt
De geometrische interpretatie: plot λ op één as en W op de andere. Het product L is het oppervlak van de rechthoek die ze vormen. Capaciteitsplanning zit binnenin deze rechthoek.
Waarom het belangrijk is: willekeurige twee van de drie grootheden bepalen de derde. Meet doorvoer en latente tijd, dan weet je de bezetting. Meet bezetting en doorvoer, dan weet je de latente tijd. De wet is robuust: deze geldt voor webverzoeken, restauranttafels, supermarktwachtrijen en CPU-pipelines zonder aanpassingen.
Drie concrete voorbeelden:
- Een webdienst verwerkt 200 verzoeken/s met een gemiddelde latente tijd van 50 ms (0,05 s). L = 200 × 0,05 = 10 in behandeling.
- Een koffiezaak bedient 60 klanten/uur met een gemiddelde verblijfstijd van 15 minuten (0,25 u). L = 60 × 0,25 = 15 klanten binnen.
- Een backend-pool verwerkt 1500 verzoeken/s met een gemiddelde latente tijd van 200 ms (0,2 s). L = 1500 × 0,2 = 300 in behandeling.
Implicatie voor dimensionering: het aantal workers / threads / verbindingen van een laag moet minimaal L zijn om bij te kunnen. Minder betekent groei van de wachtrij.
Waarom de latensie explodeert boven 80% benutting
De belangrijkste curve in de operatie
Plot de benutting op de x-as (0% tot 100%) en de gemiddelde wachttijd op de y-as. De vorm is een van de meest bepalende curves in capaciteitsplanning.
Het M/M/1-wachtrijmodel: voor een systeem met Poisson-aankomsten (willekeurig) en exponentiële bedieningstijden (willekeurig), is de gemiddelde wachttijd:
W_q = ρ / (μ × (1 - ρ))
waarbij ρ de benutting is (0 tot 1) en μ het bedieningsritme.
De vorm van de curve:
- Bij ρ = 0,5 (50% benutting) is de wachttijd klein (1 bedieningstijd).
- Bij ρ = 0,7 (70% benutting) is de wachttijd ongeveer 2,3 servicetijden.
- Bij ρ = 0,8 (80% benutting) is de wachttijd ongeveer 4 servicetijden.
- Bij ρ = 0,9 (90% benutting) is de wachttijd ongeveer 9 servicetijden.
- Bij ρ = 0,95 (95% benutting) is de wachttijd ongeveer 19 servicetijden.
- Bij ρ = 1,0 (100% benutting) is de wachttijd oneindig.
De knik: rond de 80% benutting buigt de curve scherp af. Onder de knik is de capaciteit comfortabel; daarboven stijgt de latentie sneller dan de benutting.
Praktische interpretatie: streef naar 70% benutting voor de stationaire toestand, nooit 100%. De 30% 'ruimte' is geen verspilling; het is de prijs voor een beperkte latentie.
Dimensionering over de knie
Twee scenario's:
Scenario A: 10 replica's draaien op 60% CPU. Latency p99 = 100 ms.
Scenario B: dezelfde vloot draait op 90% CPU door verkeerstoename. p99 = 600 ms.
Zelfde vloot, zelfde code, alleen de benutting is veranderd.
Grootte & Trigger Samen
Synthese
Je kunt nu de Wet van Little toepassen als een rechthoek, de wachtrijcurve en het knikpunt daarvan lezen, en beide verbinden met capaciteitsbeslissingen.
Pas beide toe.
Een backendlaag verwerkt 2.000 req/s met een gemiddelde latentie van 50 ms per replica, met een capaciteit van 80 req/s bij 70% CPU. De piekfactor is 2x; je wilt overleven bij 3 gelijktijdige replica-fouten.
Begeleidend Notities
Begeleidend Notities
Deze les over geometrie herformuleert de hoofdlees Stateless Horizontal Scaling als kwantitatieve geometrie.
De volgende bijles, geometry_of_ingress_egress_separation, herformuleert de splitsing van de netwerkgrens als een tweetijdige graaf met een knoop die de splitsing verwijdert.
Goed gedaan.