Þú ert á bakvakt fyrir vefþjónustu: álagsjafnari fyrir framan flota tilvika, skyndiminni fyrir framan gagnagrunn og 99,9 % aðgengismarkmið. Á hverri mínútu reiknar líkanið biðtíma, tímamörk, skyndiminnishittni og álag á gagnagrunn úr kennslubókarformúlum — og hvað ákvarðanir þínar kosta.
Það sem þú lærir
Hvers vegna biðtími springur nálægt fullri nýtingu (Erlang C) og hvers vegna sjálfvirk stigstærð með ræsitöf kemur alltaf of seint.
Hvernig SLO, villukvótar og brunahraðaviðvaranir ákvarða hvenær á að afturkalla.
Hvernig kalt skyndiminni verður að gagnagrunnsbilun og hvaða stjórntæki kaupa tíma: niðurfelling, afturför, forhitun.
Hermir
Tími 0 mín.
▶Tilvik í þjónustu
⚙Tilvik að ræsast
!Tilvik á slæmu smíðinni
·Laus rauf
•Komandi beiðnir
Stýringar
Gólf fyrir flotann. Ef það er hækkað ræsast tilvik strax — þau þurfa samt ræsitöfina áður en þau þjóna.
Markmiðsrakning á nýtingu; engin ný útskölun meðan tilvik eru enn að ræsast. Slökkt = nákvæmlega lágmarkið.
Lægra = meira svigrúm og meiri kostnaður. Mæld nýting getur ekki farið yfir 100 %, svo mettaður floti vex aðeins skref fyrir skref.
Lengri TTL = fleiri hittni, en svör geta verið eldri (meðalaldur ≈ TTL/2).
Hleður heita lykla í 6 mínútur (+12 % af skyndiminninu á mínútu) gegn 600 aukafyrirspurnum á sekúndu í gagnagrunn.
Hlutfall af 30 % lágforgangsumferðinni (forsókn, runuvinnsla, skriðlar) sem er hafnað í álagsjafnara með „reyndu síðar“.
Þungi eiginleikinn bætir við 20 ms af CPU og einni gagnagrunnsfyrirspurn á beiðni. Slökkt = mjúk afturför (graceful degradation).
Setur síðustu góðu útgáfuna aftur í notkun á nýjum vélaflota (5 mín, rukkað tvisvar) og færir síðan umferðina. Að ýta aftur endurræsir undirbúninginn; ef engin slæm útgáfa er í gangi kostar það aðeins peninga.
Vísar
Villutíðni
0,00%
eðlilegt
p99-biðtími
342ms
eðlilegt
Villukvóti eftir (30 dagar)
50,0%
eðlilegt
Nýting flota
52%
eðlilegt
Brunahraði (1 klst.)
0,0 ×
Beiðnir
1125 req/s
Tilvik í þjónustu
10
Tilvik að ræsast
0
Hittni skyndiminnis
77 %
Nýting gagnagrunns
19 %
Umferð felld niður
0 %
Kostnaður flota
4,00 $/h
Kostnaður hingað til
0,00 $
Meðalaldur svara í skyndiminni
30 s
Umferð á slæmu smíðinni
0 %
Meðmæli tiltæk
100 %
Þróun
Neyðarsviðsmyndir
Stig 1 · Slæm útgáfa
Ný smíði fer út klukkan 09:10. Mánuðurinn hefur þegar verið erfiður: aðeins 20 % af villukvótanum eru eftir. Mínútum eftir uppsetningu glymur brunahraðaviðvörunin. Verndaðu kvótann.
Villukvóti eftir í lokin ≥ 18,5 %
Meðalvillutíðni ≤ 0,65 % eftir uppsetningu
Kostnaður flota ≤ $9,50
Stig 2 · Skyndilegur mannfjöldi
Tengill á þjónustuna dreifist hratt og umferðarbylgju er vænst einhvern tímann í morgun — enginn veit hvenær eða hve stór hún verður. Ný tilvik þurfa 8 mínútur til að ræsast í dag. Þegar hún kemur skaltu halda villum og seinkun niðri án þess að brenna peningum á ónotaða afkastagetu.
Meðalvillutíðni ≤ 0,2 %
Meðal p99-biðtími ≤ 400 ms
Meðalumferð felld niður ≤ 5 %
Heildarkostnaður ≤ $21
Meðmæli tiltæk ≥ 85 % tímans
Stig 3 · Kalt skyndiminni
Á hádegistoppnum hreinsar viðhaldsskrifta allt skyndiminnið. Hver beiðni fer nú í gagnagrunninn, sem var stærðaður fyrir venjulega 85 % hittni. Komdu þjónustunni aftur í lag án þess að ofhlaða gagnagrunninn.
Meðalvillutíðni ≤ 1,5 %
Nýting gagnagrunns aldrei yfir 90 % eftir fyrstu mínútu
Meðalaldur svara í skyndiminni ≤ 90 s að meðaltali
Heildarkostnaður ≤ $9
Meðmæli tiltæk ≥ 80 % tímans
Meðalumferð felld niður ≤ 5 %
Grunnur — líkanið á bak við tölurnar
Hvert samband sem hermirinn notar, með heimild. Fastar merktir sem forsendur eru táknrænar kvarðanir.
Beiðnir fylgja dægurferli auk truflana; fjöldi á mínútu er tilviljunarkenndur (Poisson, normalnálgun) með örlitlum sveiflum.
λ(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]Forsenda: fjöldi vinnsluferla, þjónustutímar, afkastageta gagnagrunns, stærð skyndiminnis, áfyllingarhraði, verð og villutíðni slæmu smíðinnar eru dæmigerð gildi fyrir meðalstóra vefþjónustu.
Erlang C: líkurnar á því að beiðni þurfi að bíða eftir lausu vinnsluferli í M/M/N kerfi.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Hali biðtíma: líkurnar á að bíða lengur en t falla veldisvísislega; beiðnir sem enn bíða við 2 sekúndna tímamörkin misheppnast. Umfram afkastagetu misheppnast umframið.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Nálgun: að leggja saman þjónustu- og biðtímabrot er ekki nákvæmt p99 af summu þeirra (það getur verið aðeins of hátt eða lágt); biðröðin er meðhöndluð sem stöðug innan hverrar mínútu því beiðnir taka millisekúndur.
Lögmál Littles: uppteknir vinnsluferlar = komuhraði × tími í þjónustu.
TTL-skyndiminni: með tilviljunarkenndum beiðnum hefur hver ósókn upphaf TTL-tímabils þar sem beiðnir hitta.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Skyndiminnisósóknir hlaða gagnagrunninn; biðtími hans hægir á hverri beiðni sem snertir hann, sem fyllir líka vinnsluferla forritsins.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Forsenda: fjöldi vinnsluferla, þjónustutímar, afkastageta gagnagrunns, stærð skyndiminnis, áfyllingarhraði, verð og villutíðni slæmu smíðinnar eru dæmigerð gildi fyrir meðalstóra vefþjónustu.
SLO og villukvóti: brunahraðinn segir hversu mörgum sinnum hraðar en leyfilegt er kvótinn er notaður.
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]
Sjálfvirkur stigstærðari með markmiðsrakningu, ræsitöf og kælitíma.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Forsenda: fjöldi vinnsluferla, þjónustutímar, afkastageta gagnagrunns, stærð skyndiminnis, áfyllingarhraði, verð og villutíðni slæmu smíðinnar eru dæmigerð gildi fyrir meðalstóra vefþjónustu.
Aðrir rekstrarfastar sem líkanið notar.
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 instancesForsenda: fjöldi vinnsluferla, þjónustutímar, afkastageta gagnagrunns, stærð skyndiminnis, áfyllingarhraði, verð og villutíðni slæmu smíðinnar eru dæmigerð gildi fyrir meðalstóra vefþjónustu.
Handahóf: seeded mulberry32 rafall; dreifingar sem notaðar eru — jöfn, veldis (andhverf CDF), normal (Box–Muller), Poisson (Knuth). Fræið er sýnt og hægt að deila því.
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