L = λ × W
Den mest användbara ekvationen inom kapacitetsplanering
För vilken stabil kö som helst, oavsett dess interna struktur: L = λ × W, där:
- L = genomsnittligt antal objekt i systemet (pågående eller väntande)
- λ (lambda) = genomsnittlig ankomsttakt (objekt per tidsenhet)
- W = genomsnittlig tid varje objekt tillbringar i systemet
Den geometriska tolkningen: rita λ på en axel och W på den andra. Produkten L är arean av rektangeln de bildar. Kapacitetsplanering sker inom denna rektangel.
Varför det är viktigt: vilka som helst två av de tre storheterna bestämmer den tredje. Mät du genomströmning och latens, känner du till upptaget. Mät du upptaget och genomströmningen, känner du till latensen. Lagen är robust: den gäller för webbfofrågan, restaurangbord, köer i supermarknader och CPU-pipelines utan modifikation.
Tre konkreta exempel:
- En webbtjänst hanterar 200 förfrågningar/s med en genomsnittlig latens på 50 ms (0,05 s). L = 200 × 0,05 = 10 på väg.
- En kaffeshop serverar 60 kunder/timme med en genomsnittlig vistestid på 15 minuter (0,25 h). L = 60 × 0,25 = 15 kunder inne.
- En backend-pool hanterar 1500 förfrågningar/s med en genomsnittlig latens på 200 ms (0,2 s). L = 1500 × 0,2 = 300 på väg.
Konsekvens för dimensionering: antalet arbetare / trådar / anslutningar i en nivå måste vara minst L för att hänga med. Mindre än så innebär köökning.
Varför latens exploderar vid över 80 % utnyttjandegrad
Den viktigaste kurvan inom drift
Plotta utnyttjandegrad på x-axeln (0 % till 100 %) och genomsnittlig väntetid på y-axeln. Formen är en av de mest avgörande kurvorna inom kapacitetsplanering.
M/M/1-kömodellen: för ett system med Poisson-ankomster (slumpmässiga) och exponentiella servicetider (slumpmässiga) är den genomsnittliga väntetiden:
W_q = ρ / (μ × (1 - ρ))
där ρ är utnyttjandegraden (0 till 1) och μ är servicetakten.
Kurvans form:
- Vid ρ = 0,5 (50 % utnyttjandegrad) är väntetiden liten (en servicetid).
- Vid ρ = 0,7 (70 % utnyttjandegrad) är väntetiden cirka 2,3 servicetider.
- Vid ρ = 0,8 (80 % utnyttjandegrad) är väntetiden cirka 4 servicetider.
- Vid ρ = 0,9 (90 % utnyttjandegrad) är väntetiden cirka 9 servicetider.
- Vid ρ = 0,95 (95 % utnyttjandegrad) är väntetiden cirka 19 servicetider.
- Vid ρ = 1,0 (100 % utnyttjandegrad) är väntetiden oändlig.
Knäet: kring 80 % utnyttjandegrad böjer sig kurvan brant. Under knäet är kapaciteten bekväm; ovanför ökar latensen snabbare än utnyttjandegraden.
Praktisk tolkning: sikta på 70 % utnyttjandegrad för jämviktstillstånd, aldrig 100 %. De 30 % 'reserven' är inte slöseri; det är priset för begränsad latens.
Storleksbestämning vid knäet
Två scenarier:
Scenario A: 10 repliker som körs med 60 % CPU. Latens p99 = 100 ms.
Scenario B: samma flotta som körs med 90 % CPU på grund av trafikökning. p99 = 600 ms.
Samma flotta, samma kod, endast utnyttjandegraden har ändrats.
Storlek och utlösare tillsammans
Syntes
Du kan nu tillämpa Littles lag som en rektangel, läsa av kökurvan och dess knä samt koppla ihop båda med kapacitetsbeslut.
Tillämpa båda.
En backend-tjänst hanterar 2 000 req/s med en genomsnittlig latens på 50 ms per replika, med en kapacitet på 80 req/s vid 70 % CPU. Spikfaktorn är 2x; du vill klara av 3 simultana replikafel.
Kompanionsanteckningar
Kompanionsanteckningar
Denna lektion om geometri omskrider huvudlektionen Stateless Horizontal Scaling som kvantitativ geometri.
Nästa kompanjon, geometry_of_ingress_egress_separation, omskrider nätverksgränsskilda som en bipartit graf med en skiljningspunkt som skilda eliminerar.
Bra jobbat.