L = λ × W: Een rechthoek
Little's Law: De meest nuttige vergelijking in capaciteitsplanning
John Little bewees in 1961 dat voor elke stabiele wachtrij, ongeacht zijn interne structuur: L = λ × W, waar:
- L = gemiddeld aantal items in het systeem (wachtrij + in bewerking)
- λ (lambda) = gemiddelde aankomstsnelheid van items per tijdseenheid
- W = gemiddelde tijd die elk item in het systeem doorbrengt
De geometrische interpretatie: zet aankomstsnelheid λ op één as & verblijftijd W op de ander. Het product L is de oppervlakte van de rechthoek die zij vormen. Capaciteitsplanning leeft in deze rechthoek.
Waarom het belangrijk is: twee willekeurige van de drie grootheden bepalen de derde. Als je doorvoer en latentie meet, weet je bezetting. Als je bezetting en doorvoer meet, weet je latentie. De wet is robuust: het is van toepassing op webaanvragen, restauranttafels, supermarkt rijen, en CPU-pijplijnen zonder wijziging.
Drie concrete voorbeelden:
- Een webservice verwerkt 200 verzoeken/seconde met gemiddelde latentie 50 ms (0,05 s). L = 200 × 0,05 = 10 verzoeken onderweg op elk moment.
- Een coffeeshop bedient 60 klanten/uur met gemiddelde verblijftijd 15 minuten (0,25 u). L = 60 × 0,25 = 15 klanten gemiddeld aanwezig.
- Een fabrieklijn produceert 100 widgets/uur met elke widget neemt 2 uur van begin tot eind. L = 100 × 2 = 200 widgets in proces.
Implicatie voor inrichting: als je voor L kunt dimensioneren (gelijktijdige items onderweg), heb je voor het systeem gedimensioneerd. Het aantal worker threads, databaseverbindingen, of wachtrij slots zijn allemaal afgeleid van L.
Een worker pool dimensioneren
Je video-transcodeerservice is gedimensioneerd voor een gemiddelde aankomstsnelheid van 30 transcodeer jobs per minuut, elk duurt 90 seconden van begin tot eind. De huidge worker pool heeft 30 workers.
Waarom latentie explodeert voorbij 80% benutting
De belangrijkste curve in capaciteitsplanning
Zet benutting op de x-as (0% tot 100%) en gemiddelde latentie op de y-as. De vorm die ontstaat is een van de meest gevolgenrijke curves in operaties: het verklaart waarom teams benutting ver onder de 100% nastreven, waarom gereserveerde headroom geen verspilling is, en waarom systemen die 'efficiënt' met hoge benutting draaien zonder waarschuwing bezwijken.
De M/M/1 wachtrij curve: voor een systeem met Poisson aankomsten (willekeurig) en exponentiële serviceijden (willekeurig), volgt de gemiddelde wachttijd:
W_q = ρ / (μ(1-ρ))
waarbij ρ (rho) de benutting is (0 tot 1) en μ de servicesnelheid. De noemer (1-ρ) is de kernpunt: als ρ naar 1 nadert, nadert de noemer naar 0, en de wachttijd nadert oneindig.
Numerieke voorbeelden (latentie vermenigvuldiger vs ρ voor M/M/1):
- ρ = 0,5: latentie verhouding 1,0 (baseline)
- ρ = 0,7: latentie verhouding ~2,3
- ρ = 0,8: latentie verhouding ~4,0
- ρ = 0,9: latentie verhouding ~9,0
- ρ = 0,95: latentie verhouding ~19,0
- ρ = 0,99: latentie verhouding ~99,0
De knik zit rond 70-80% benutting. Onder de knik neemt latentie langzaam toe door belasting. Boven de knik explodeert latentie niet-lineair. Dit is waarom de canonieke SRE-regel is: zet steady-state benutting onder de 80%, rijd nooit duurzaam boven 90% uit.
Waarom traditionele ops teams dit onderschatten: een server op 60% CPU 'ziet er bezet uit' maar heeft comfortabele latentie headroom. Een server op 90% CPU 'ziet er productief uit' maar is één werklastverschuiving verwijderd van latentie catastrofe. De geometrische waarheid: de helling van de curve is de werkelijke bedreiging, niet zijn huidge y-waarde.
De curve lezen
Een team draait een service op 85% CPU benutting steady state. Huidge p99 latentie is 200 ms. Ze overwegen 30% meer verkeer toe te voegen om werkbelasting van een andere service die wordt stopgezet te consolideren.
Helling, Intercept, & de Forecast Cone
Groei lezen van een helling
Vraagvoorspelling reduceert (in veel gevallen) tot het trekken van de juiste lijn door historische gegevens. De geometrische eigenschappen van die lijn: helling, intercept, en onzekerheidscone, coderen de gehele voorspelling.
Lineaire trend (y = mx + b): geschikt voor korte vensters of werkelijk lineaire processen. Helling m is de groeisnelheid per tijdseenheid. Intercept b is de startwaarde. Nuttig wanneer groei gestage is. Heeft de neiging onderschat te worden wanneer het proces eigenlijk samengesteld is.
Exponentiële trend (y = b × e^(mx)): geschikt voor samengestelde groei: virale adoptie, gebruiker-netwerk effecten, multiplicatieve seizoensgebondenheid. Op een log-schaal y-as wordt exponentiële groei lineair, wat slope schatting makkelijker maakt. Helling m op log-schaal is de groeisnelheid per tijdseenheid.
Stukgewijs lineair: geschikt wanneer groei duidelijke regimes heeft. Een startup kan langzaam groeien gedurende 18 maanden, dan een virale inflectie hebben die 6 maanden explosieve groei produceert, dan plateau. Drie lineaire segmenten passen dit beter dan elke enkele curve.
Forecast cone: de centrale schatting plus boven- en ondergrensen, getrokken als een verbredende cone in de toekomst. De breedte van de cone groeit in de tijd omdat onzekerheid samengesteld is. Een 4-week voorspelling kan ±10% grenzen hebben; een 12-maands voorspelling heeft vaak ±50% of meer.
Seizoensgebondenheid decompositie: echte vraag combineert trend + seizoensgebonden cyclus + ruis. Statistische bibliotheken (statsmodels, Prophet) ontleden een serie in deze drie componenten, waardoor de trend afzonderlijk van het seizoensgebonden patroon kan worden geprojecteerd. Geometrisch is de trend de onderliggende drift, de seizoensgebondenheid is de periodieke rimpling erop, en de ruis is de resterende jitter.
Een trend model kiezen
Je hebt 24 maanden maandelijkse verzoek volumes. Maanden 1-12 groeiden van 1M naar 2M (lineair-uitziend, +83K/maand). Maanden 13-18 groeiden van 2M naar 4M (steiler, +330K/maand). Maanden 19-24 groeiden van 4M naar 12M (veel steiler nog). Marketing bevestigt dat een virale productfunctie in maand 13 werd gelanceerd die de inflectie aandrijft.
Capaciteit vs vraag als 2D meetkunde
De plot waar elk capaciteit team in leeft
Zet tijd op de x-as. Zet vraag en capaciteit op de y-as als twee aparte lijnen. De verticale opening ertussen op elk moment is de headroom. Het 2D gebied tussen de curven is de headroom envelop.
Drie referentie vormen:
- Gezonde envelop: capaciteitslijn blijft comfortabel boven vraagslijn. De opening kan verkleinen tijdens pieken maar verdwijnt nooit. De envelop is een veiligheidsband.
- Sluitende envelop: capaciteit groeit langzamer dan vraag. De opening wordt in de loop der tijd smaller. Het snijpunt in de toekomst is wanneer het systeem uit headroom raakt: de datum waarop het team capaciteit moet toevoegen.
- Omgekeerde envelop: vraag overschrijdt capaciteit. Het systeem is in incident grondgebied. De verticale grootte van de omkering is het tekort dat op de een of andere manier moet worden bediend (wachtrij overflow, foutpercentages, klantimpact).
De standaard capaciteitsplanning grafiek zet uit:
- Recente vraaghistorie (solide blauwe lijn)
- Voorspelde vraag met grenzen (stippellijn + gearceerde cone)
- Huidge capaciteit (solide groene lijn)
- Geplande capaciteit toevoegingen met afleveringsdatums (stapfunctie)
- De intersectiedatum waar voorspelde vraag huidge capaciteit kruist: dit is de deadline voor de volgende inrichting
De visuele beslissingsregel: houd de capaciteit stapfunctie altijd boven de bovengrens van de forecast cone. Voeg geen capaciteit toe tot de centrale schatting; voeg toe tot de bovengrens. De kosten van over-inrichting zijn eindig (wat inactieve capaciteit); de kosten van onder-inrichting zijn onbegrensd (verloren gebruikers, cascade failure, reputatieschade).
De envelop lezen
Je capaciteitskaart toont: huidge vraag is 1.500 RPS groeiing 20% per maand. Huidge capaciteit is 2.500 RPS. Een nieuwe server batch (+1.500 RPS capaciteit) komt in 8 weken aan. De forecast cone heeft ±15% grenzen op de 8-week horizon.
Meetkunde van capaciteit: Afronden
Vormen die de toekomst voorspellen
Je bent door vier geometrische structuren gelopen die onder capaciteitsplanning liggen:
- Little's Law (L = λ × W) als de oppervlakte van een rechthoek die steady-state bezetting bepaalt
- De wachtrij curve met zijn knik op 80% benutting, coderend de niet-lineaire kosten van hete run
- Trend hellingen en forecast cones die historische gegevens omzetten in haalbare projecties
- Headroom enveloppen als 2D plots van capaciteit versus vraag, met snijdatums die inrichtingsdeadlines markeren
Capaciteitsplanning is, aan zijn visuele kern, de discipline van het veilig houden van één curve boven een ander in de loop der tijd. De getallen zijn dressing; de vormen dragen de waarheid. Een capaciteits engineer die de wachtrij curve correct leest zal problemen vangen die een CPU dashboard verbergt totdat het systeem al brandt.
De metgezel les over capaciteitsplanning behandelde de praktijken: meting, voorspelling, plafondtests, headroom, en schaling. Deze les behandelde de meetkunde eronder. Samen vormen zij het visuele en analytische steigers van lopende services die schalen zonder verrassing.