🖥️ IT-bedrywighede — betroubaarheidsingenieurswese Lewendige model
Jy is oproepbaar vir 'n webdiens: 'n lasbalanseerder voor 'n vloot instansies, 'n cache voor 'n databasis, en 'n 99,9 % beskikbaarheidsdoelwit. Elke minuut bereken die model tou-vertraging, uittelings, cache-treffers en databasislas uit handboekformules — en wat jou besluite kos.
Wat jy sal leer
Hoekom latensie ontplof naby volle benutting (Erlang C), en hoekom outomatiese skaal met 'n opstartvertraging altyd laat aankom.
Hoe SLO's, foutbegrotings en brandtempo-waarskuwings besluit wanneer om terug te rol.
Hoe 'n koue cache in 'n databasisonderbreking verander, en watter hefbome tyd koop: afstort, degradeer, opwarm.
Simuleerder
Tyd 0 min
▶Instansie wat bedien
⚙Instansie wat opstart
!Instansie op die slegte bou
·Vrye gleuf
•Inkomende versoeke
Kontroles
Vloer vir die vloot. Om dit te verhoog begin instansies dadelik — hulle het steeds die opstartvertraging nodig voor hulle bedien.
Teikenvolging op benutting; geen nuwe uitskaal terwyl instansies nog opstart nie. Af = presies die minimum.
Laer = meer ruimte en meer koste. Gemete benutting kan nie 100 % oorskry nie, so 'n versadigde vloot groei net stap vir stap.
Langer TTL = meer treffers, maar antwoorde kan ouer wees (gemiddelde ouderdom ≈ TTL/2).
Laai warm sleutels vir 6 minute (+12 % van die cache per minuut) teen die prys van 600 ekstra databasisnavrae/s.
Deel van die lae-prioriteit 30 % (vooraflaai, bondel, kruipers) wat by die lasbalanseerder met “probeer later weer” verwerp word.
Die swaar kenmerk voeg 20 ms SVE en een databasisnavraag per versoek by. Af = grasieuse degradering.
Ontplooi die laaste goeie weergawe op 'n vars vloot (5 min, twee keer gehef), skakel dan die verkeer oor. Weer druk begin die voorbereiding oor; as geen slegte weergawe aktief is nie, kos dit net geld.
Aanwysers
Foutkoers
0,00%
normaal
p99-latensie
342ms
normaal
Foutbegroting oor (30 dae)
50,0%
normaal
Vlootbenutting
52%
normaal
Brandtempo (1 h)
0,0 ×
Versoeke
1125 req/s
Instansies wat bedien
10
Instansies wat opstart
0
Cache-treffertempo
77 %
Databasisbenutting
19 %
Verkeer afgestort
0 %
Vlootkoste
4,00 $/h
Koste tot dusver
0,00 $
Gemiddelde ouderdom van gekaste antwoorde
30 s
Verkeer op die slegte bou
0 %
Aanbevelings beskikbaar
100 %
Tendens
Krisisscenario's
Vlak 1 · Slegte vrystelling
'n Nuwe bou gaan om 09:10 uit. Die maand was reeds moeilik: net 20 % van die foutbegroting is oor. Minute ná die ontplooiing lui die brandtempo-oproep. Beskerm die begroting.
Foutbegroting oor aan die einde ≥ 18,5 %
Gemiddelde foutkoers ≤ 0,65 % ná die ontplooiing
Vlootkoste ≤ $9,50
Vlak 2 · Skielike skare
'n Skakel na die diens versprei vinnig en 'n verkeerstoename word êrens vanoggend verwag — niemand weet wanneer, of hoe groot nie. Nuwe instansies het vandag 8 minute nodig om te begin. Wanneer dit kom, hou foute en latensie laag sonder om geld op ledige kapasiteit te verbrand.
Gemiddelde foutkoers ≤ 0,2 %
Gemiddelde p99-latensie ≤ 400 ms
Gemiddelde verkeer afgestort ≤ 5 %
Totale koste ≤ $21
Aanbevelings beskikbaar ≥ 85 % van die tyd
Vlak 3 · Koue cache
By die middagpiek spoel 'n onderhoudskrip die hele cache leeg. Elke versoek gaan nou na die databasis, wat vir die gewone 85 % treffertempo gedimensioneer is. Kry die diens terug sonder om die databasis te oorlaai.
Gemiddelde foutkoers ≤ 1,5 %
Databasisbenutting nooit bo 90 % ná die eerste minuut
Gemiddelde ouderdom van gekaste antwoorde ≤ 90 s gemiddeld
Totale koste ≤ $9
Aanbevelings beskikbaar ≥ 80 % van die tyd
Gemiddelde verkeer afgestort ≤ 5 %
Grondslag — die model agter die syfers
Elke verband wat die simuleerder gebruik, met sy bron. Konstantes gemerk as aannames is illustratiewe kalibrasies.
Versoeke volg 'n daaglikse kurwe plus steurings; die telling per minuut is ewekansig (Poisson, normale benadering) met 'n bietjie uitbarstings.
λ(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]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
Erlang C: die waarskynlikheid dat 'n versoek vir 'n vrye werker moet wag in 'n M/M/N-stelsel.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Wagtyd-stert: die kans om langer as t te wag daal eksponensieel; versoeke wat by die 2-s-uitteltyd nog wag, misluk. Bokant kapasiteit misluk die oorskot.
p99-latensie uit die diensttyd- en wagtyd-kwantiele.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Benadering: om die diens- en wagkwantiele bymekaar te tel is nie die presiese p99 van hul som nie (dit kan 'n bietjie hoog of laag wees); die tou word binne elke minuut as bestendig behandel omdat versoeke millisekondes neem.
Little se wet: besige werkers = aankomstempo × tyd in diens.
TTL-cache: met ewekansige versoeke begin elke mis 'n TTL-tydperk waartydens versoeke tref.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Cache-mistreffers laai die databasis; sy tou-vertraging vertraag elke versoek wat dit raak, wat ook die toepassingswerkers vul.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
SLO en foutbegroting: die brandtempo sê hoeveel keer vinniger as toegelaat die begroting bestee word.
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]
Teikenvolgende outoskaleerder met 'n opstartvertraging en 'n afkoelperiode.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
Ander bedryfskonstantes wat deur die model gebruik word.
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 instancesAanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
Lukraakheid: 'n gesaaide mulberry32-genereerder; verdelings gebruik — uniform, eksponensieel (inverse CDF), normaal (Box–Muller), Poisson (Knuth). Die saad word gewys en kan gedeel word.
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