🖥️ IT-operacije – zanesljivost storitev Model v živo
Dežuraš za spletno storitev: porazdeljevalnik obremenitve pred floto instanc, predpomnilnik pred bazo in cilj razpoložljivosti 99,9 %. Vsako minuto model izračuna čakalno zakasnitev, časovne omejitve, zadetke predpomnilnika in obremenitev baze po učbeniških formulah – in koliko stanejo tvoje odločitve.
Kaj se boste naučili
Zakaj zakasnitev eksplodira blizu polne izkoriščenosti (Erlang C) in zakaj samodejno skaliranje z zakasnitvijo zagona vedno pride prepozno.
Kako SLO-ji, proračuni napak in opozorila o hitrosti porabe odločajo, kdaj povrniti.
Kako se hladen predpomnilnik spremeni v izpad baze in kateri vzvodi kupijo čas: zavračanje, poslabšanje, ogrevanje.
Simulator
Čas 0 min
▶Instanca streže
⚙Instanca se zaganja
!Instanca na slabi gradnji
·Prosto mesto
•Dohodne zahteve
Kontrole
Spodnja meja flote. Zvišanje takoj zažene instance – pred streženjem vseeno potrebujejo zakasnitev zagona.
Sledenje cilju glede izkoriščenosti; brez novega horizontalnega skaliranja, dokler se instance še zaganjajo. Izklopljeno = natanko minimum.
Nižje = več rezerve in več stroškov. Izmerjena izkoriščenost ne more preseči 100 %, zato nasičena flota raste le korak za korakom.
Daljši TTL = več zadetkov, a odgovori so lahko starejši (povprečna starost ≈ TTL/2).
Nalaga pogosto uporabljene ključe 6 minut (+12 % predpomnilnika na minuto) za ceno 600 dodatnih poizvedb v bazo/s.
Delež nizkoprednostnih 30 % (predhodno nalaganje, paketna obdelava, iskalni roboti), zavrnjen na porazdeljevalniku obremenitve z »poskusi znova pozneje«.
Težka funkcija doda 20 ms CPE in eno poizvedbo v bazo na zahtevo. Izklopljeno = nadzorovano poslabšanje.
Znova namesti zadnjo dobro različico na svežo floto (5 min, plačano dvakrat), nato preklopi promet. Ponoven pritisk ponovno zažene pripravo; če ni žive slabe različice, stane le denar.
Kazalniki
Stopnja napak
0,00%
običajno
Zakasnitev p99
342ms
običajno
Preostali proračun napak (30 dni)
50,0%
običajno
Izkoriščenost flote
52%
običajno
Hitrost porabe (1 h)
0,0 ×
Zahteve
1125 req/s
Instance, ki strežejo
10
Instance, ki se zaganjajo
0
Delež zadetkov predpomnilnika
77 %
Izkoriščenost baze
19 %
Zavrnjen promet
0 %
Stroški flote
4,00 $/h
Dosedanji stroški
0,00 $
Povprečna starost odgovorov v predpomnilniku
30 s
Promet na slabi gradnji
0 %
Priporočila na voljo
100 %
Trend
Krizni scenariji
Stopnja 1 · Slaba izdaja
Nova gradnja gre v produkcijo ob 09:10. Mesec je bil že naporen: ostalo je le 20 % proračuna napak. Nekaj minut po izdaji se sproži opozorilo o hitrosti porabe. Zaščiti proračun.
Preostali proračun napak ob koncu ≥ 18,5 %
Povprečna stopnja napak ≤ 0,65 % po izdaji
Stroški flote ≤ 9,50 $
Stopnja 2 · Nenaden naval obiskovalcev
Povezava do storitve se hitro širi in nekoč danes zjutraj se pričakuje sunek prometa — nihče ne ve kdaj ali kako velik. Novi primerki se danes zaganjajo 8 minut. Ko pride, napake in zakasnitev obdržite nizki, ne da bi zapravljali denar za nedejavno zmogljivost.
Povprečna stopnja napak ≤ 0,2 %
Povprečna zakasnitev p99 ≤ 400 ms
Povprečni zavrnjeni promet ≤ 5 %
Skupni stroški ≤ 21 $
Priporočila na voljo ≥ 85 % časa
Stopnja 3 · Hladen predpomnilnik
Ob opoldanskem vrhu skript za vzdrževanje izprazni ves predpomnilnik. Vsaka zahteva zdaj gre v bazo, ki je bila dimenzionirana za običajnih 85 % zadetkov. Vrni storitev, ne da bi preobremenil bazo.
Povprečna stopnja napak ≤ 1,5 %
Izkoriščenost baze po prvi minuti nikoli nad 90 %
Povprečna starost odgovorov v predpomnilniku ≤ 90 s v povprečju
Skupni stroški ≤ 9 $
Priporočila na voljo ≥ 80 % časa
Povprečni zavrnjeni promet ≤ 5 %
Osnova – model za številkami
Vsaka zveza, ki jo simulator uporablja, z virom. Konstante, označene kot predpostavke, so ilustrativne umeritve.
Zahteve sledijo dnevni krivulji plus motnje; število na minuto je naključno (Poisson, normalni približek) z nekaj sunkovitosti.
λ(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]Predpostavka: število delavcev, časi strežbe, zmogljivost baze, velikost predpomnilnika, hitrost polnjenja, cene in stopnja napak slabe gradnje so ilustrativne vrednosti za srednje veliko spletno storitev.
Erlang C: verjetnost, da mora zahteva počakati na prostega delavca v sistemu M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Rep čakalnega časa: verjetnost čakanja dlje od t eksponentno pada; zahteve, ki še čakajo ob časovni omejitvi 2 s, odpovejo. Nad zmogljivostjo presežek odpove.
Zakasnitev p99 iz kvantilov časa strežbe in čakalnega časa.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Približek: seštevek kvantilov storitve in čakanja ni točen p99 njune vsote (lahko je nekoliko previsok ali prenizek); čakalna vrsta je znotraj vsake minute obravnavana kot stacionarna, ker zahteve trajajo milisekunde.
Littlov zakon: zasedeni delavci = hitrost prihodov × čas strežbe.
Predpomnilnik s TTL: pri naključnih zahtevah vsak zgrešek začne obdobje TTL, v katerem zahteve zadenejo.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Zgrešitve predpomnilnika obremenijo bazo; njena čakalna zakasnitev upočasni vsako zahtevo, ki se je dotakne, kar polni tudi delavce aplikacije.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Predpostavka: število delavcev, časi strežbe, zmogljivost baze, velikost predpomnilnika, hitrost polnjenja, cene in stopnja napak slabe gradnje so ilustrativne vrednosti za srednje veliko spletno storitev.
SLO in proračun napak: hitrost porabe pove, kolikokrat hitreje od dovoljenega se proračun porablja.
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]
Samodejni skalirnik s sledenjem cilju, z zakasnitvijo zagona in časom umirjanja.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Predpostavka: število delavcev, časi strežbe, zmogljivost baze, velikost predpomnilnika, hitrost polnjenja, cene in stopnja napak slabe gradnje so ilustrativne vrednosti za srednje veliko spletno storitev.
Druge obratovalne konstante, ki jih uporablja model.
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 instancesPredpostavka: število delavcev, časi strežbe, zmogljivost baze, velikost predpomnilnika, hitrost polnjenja, cene in stopnja napak slabe gradnje so ilustrativne vrednosti za srednje veliko spletno storitev.
Naključnost: generator mulberry32 s semenom; uporabljene porazdelitve – enakomerna, eksponentna (inverzna CDF), normalna (Box–Muller), Poissonova (Knuth). Seme je prikazano in ga je mogoče deliti.
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