🖥️ IT-operaasjes — betrouberens fan tsjinsten Live model
Do hast stânby foar in webtsjinst: in lestferdieler foar in float eksimplaren, in cache foar in databank, en in beskikberensdoel fan 99,9 %. Elke minút berekkenet it model wachtrigefertraging, time-outs, cachetreffers en databanklêst út learboekformules — en wat dyn besluten kostje.
Wat jo leare sille
Wêrom de latinsje eksplodearret tichtby folsleine benutting (Erlang C), en wêrom automatysk skaalfergrutsjen mei in opstartfertraging altyd te let komt.
Hoe't SLO's, flaterbudzjetten en ferbrûkssnelheidsalarmen beslute wannear't weromdraaid wurdt.
Hoe't in kâlde cache in databankstoarning wurdt, en hokker regelknoppen tiid keapje: ôfstjitte, efterútgong, opwaarmje.
Simulator
Tiid 0 min
▶Eksimplaar betsjinnet
⚙Eksimplaar start op
!Eksimplaar op de minne build
·Frije plak
•Ynkommende fersiken
Regelers
Ûndergrins foar de float. Ferheegje start daliks eksimplaren — se hawwe de opstartfertraging noch nedich foardat se betsjinje.
Doelrjochte regeling op de benutting; gjin nij opskaalje salang't der noch eksimplaren opstarte. Út = krekt it minimum.
Leger = mear romte en mear kosten. Mjitten benutting kin net boppe 100 % komme, dus in fersêde float groeit allinnich stap foar stap.
Langere TTL = mear treffers, mar antwurden kinne âlder wêze (gemiddelde leeftyd ≈ TTL/2).
Laadt 6 minuten lang faak brûkte kaaien (+12 % fan de cache per minút) tsjin de priis fan 600 ekstra databankfragen/s.
Diel fan de 30 % lege prioriteit (prefetch, batch, crawlers) dat by de lestferdieler ôfwiisd wurdt mei „besykje letter wer”.
De swiere funksje foeget 20 ms CPU en ien databankfraach per fersyk ta. Út = kontrolearre efterútgong.
Set de lêste goede build op in farske float út (5 min, twa kear yn rekken brocht) en skeakelt dan it ferkear om. Opnij drukke start de tarieding op ’e nij; sûnder minne build yn it libben kostet it allinnich jild.
Yndikatoaren
Flaterrate
0,00%
normaal
p99-latinsje
342ms
normaal
Oerbleaun flaterbudzjet (30 dagen)
50,0%
normaal
Floatbenutting
52%
normaal
Ferbrûkssnelheid (1 h)
0,0 ×
Fersiken
1125 req/s
Eksimplaren dy’t betsjinje
10
Eksimplaren dy’t opstarte
0
Cache-trefferrate
77 %
Databankbenutting
19 %
Ôfstjitten ferkear
0 %
Floatkosten
4,00 $/h
Kosten oant no ta
0,00 $
Gemiddelde leeftyd fan cachte antwurden
30 s
Ferkear op de minne build
0 %
Oanbefellings beskikber
100 %
Trend
Krisissenario's
Nivo 1 · Minne release
Om 09:10 giet in nije build út. De moanne wie al hurd: mar 20 % fan it flaterbudzjet is oer. Minuten nei de útrol giet it ferbrûkssnelheidsalarm ôf. Beskermje it budzjet.
Oerbleaun flaterbudzjet oan it ein ≥ 18,5 %
Gemiddelde flaterrate ≤ 0,65 % nei de útrol
Floatkosten ≤ $ 9,50
Nivo 2 · Mannichte fan besikers
In keppeling nei de tsjinst ferspriedt him fluch en der wurdt ergens fan moarn in ferkearspiek ferwachte — nimmen wit wannear of hoe grut. Nije ynstânsjes hawwe hjoed 8 minuten nedich om te starten. As er komt, hâld flaters en latinsje leech sûnder jild te ferbaarnen oan net brûkte kapasiteit.
Gemiddelde flaterrate ≤ 0,2 %
Gemiddelde p99-latinsje ≤ 400 ms
Gemiddeld ôfstjitten ferkear ≤ 5 %
Totale kosten ≤ $ 21
Oanbefellings beskikber ≥ 85 % fan de tiid
Nivo 3 · Kâlde cache
Op de middeispiek leechmakket in ûnderhâldsskript de hiele cache. Elk fersyk giet no nei de databank, dy’t grutte hat foar de gewoane trefferrate fan 85 %. Krij de tsjinst werom sûnder de databank te oerbelêsten.
Gemiddelde flaterrate ≤ 1,5 %
Databankbenutting nea boppe 90 % nei de earste minút
Gemiddelde leeftyd fan cachte antwurden ≤ 90 s yn trochsneed
Totale kosten ≤ $ 9
Oanbefellings beskikber ≥ 80 % fan de tiid
Gemiddeld ôfstjitten ferkear ≤ 5 %
Basis — it model efter de sifers
Elke relaasje dy't de simulator brûkt, mei de boarne. Konstanten dy't as oanname markearre binne, binne yllustrative kalibraasjes.
Fersiken folgje in deikurve plus steuringen; it oantal per minút is willekeurich (Poisson, normale benadering) mei in bytsje bursten.
λ(t) = base × (1 + 0.25·sin(2π(t + clock − 6 h)/24 h)) × surge(t), clock = time of day at the start (peak at 12:00); count/min ≈ N(60λ, √(60λ)) × (1 + N(0, 0.02))[6]Oanname: oantal workers, betsjinningstiden, databankkapasiteit, cachegrutte, fersnelling fan opfolling, prizen en de flaterrate fan de minne build binne yllustrative wearden foar in middelgrutte webtsjinst.
Erlang C: de kâns dat in fersyk op in frije worker wachtsje moat yn in M/M/N-systeem.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Sturt fan de wachttiid: de kâns om langer as t te wachtsjen nimt eksponinsjeel ôf; fersiken dy’t by de time-out fan 2 s noch wachtsje, mislearje. Boppe de kapasiteit mislearret it oerskot.
p99-latinsje út de kwantilen fan betsjinningstiid en wachttiid.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Benadering: it optellen fan de kwantilen fan tsjinst- en wachttiid is net de krekte p99 fan harren som (it kin in bytsje te heech of te leech wêze); de rige wurdt binnen elke minút as stasjonêr behannele, om’t fersiken millisekonden duorje.
De wet fan Little: drokke workers = oankomstrate × betsjinningstiid.
TTL-cache: by willekeurige fersiken begjint elke misser in TTL-perioade wêryn fersiken treffe.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Cache-missers belêste de databank; har wachtrigefertraging fertraget elk fersyk dat har rekket, wat ek de app-workers fol makket.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Oanname: oantal workers, betsjinningstiden, databankkapasiteit, cachegrutte, fersnelling fan opfolling, prizen en de flaterrate fan de minne build binne yllustrative wearden foar in middelgrutte webtsjinst.
SLO en flaterbudzjet: de ferbrûkssnelheid seit hoefolle kear flugger as tastien it budzjet útjûn wurdt.
budget = 1 − SLO = 0.1 %; burn = error rate / 0.1 %; Δbudget per min = burn / 43,200; burn (1 h) = mean error rate over the last 60 min / 0.1 % (window pre-filled with the opening minute)[1][2]
Doelfolgjende autoscaler mei in opstartfertraging en in ôfkoelperioade.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Oanname: oantal workers, betsjinningstiden, databankkapasiteit, cachegrutte, fersnelling fan opfolling, prizen en de flaterrate fan de minne build binne yllustrative wearden foar in middelgrutte webtsjinst.
Oare wurkkonstanten dy’t it model brûkt.
16 workers/instance · app time 50 ms (+20 ms and +1 query with the feature on) · 2 queries/request · DB 4,000 queries/s · 20,000 hot objects · cache refill τ = 30 min (slower while the DB is saturated) · warm-up job +12 %/min for 6 min, +600 queries/s · timeout 2 s · 30 % low-priority traffic · bad build +5 % errors, ×1.25 CPU · rollback 5 min · $0.40 per instance-hour · scale-in by ≤ 20 % of the fleet after 10 quiet minutes · up to 40 instancesOanname: oantal workers, betsjinningstiden, databankkapasiteit, cachegrutte, fersnelling fan opfolling, prizen en de flaterrate fan de minne build binne yllustrative wearden foar in middelgrutte webtsjinst.
Willekeur: in seeded mulberry32-generator; brûkte ferdielingen — unifoarm, eksponinsjeel (omkearde CDF), normaal (Box–Muller), Poisson (Knuth). It seed wurdt toand en is te dielen.
M. Harchol-Balter — Performance Modeling and Design of Computer Systems: Queueing Theory in Action (M/M/k, server farms, capacity provisioning) — Cambridge University Press, 2013