🖥️ IT-operatsioonid — saidi töökindlus Reaalaja mudel
Sul on valve veebiteenusel: koormusjaotur instantside pargi ees, vahemälu andmebaasi ees ja 99,9 % käideldavuse eesmärk. Mudel arvutab igal minutil järjekorraviivituse, ajalõpud, vahemälu tabamused ja andmebaasi koormuse õpikuvalemitest — ning selle, mida sinu otsused maksavad.
Mida sa õpid
Miks latentsus plahvatab täieliku kasutuse lähedal (Erlang C) ja miks käivitusviivitusega automaatskaleerimine jõuab alati hilja.
Kuidas SLO-d, veaeelarved ja põlemiskiiruse hoiatused otsustavad, millal tagasi keerata.
Kuidas külm vahemälu muutub andmebaasi katkestuseks ja millised hoovad ostavad aega: vähendamine, lihtsustamine, soojendamine.
Simulaator
Aeg 0 min
▶Instants teenindab
⚙Instants käivitub
!Instants halval versioonil
·Vaba koht
•Sissetulevad päringud
Juhtimine
Pargi alampiir. Selle tõstmine käivitab instantsid kohe — nad vajavad endiselt käivitusviivitust enne teenindamist.
Sihtmärgi jälgimine koormuse järgi; uut väljaskaleerimist ei tehta, kuni instantsid alles käivituvad. Väljas = täpselt miinimum.
Madalam = rohkem varu ja rohkem kulu. Mõõdetud koormus ei saa ületada 100 %, seega küllastunud park kasvab vaid samm-sammult.
Pikem TTL = rohkem tabamusi, kuid vastused võivad olla vanemad (keskmine vanus ≈ TTL/2).
Laadib kuumad võtmed 6 minuti jooksul (+12 % vahemälust minutis) hinnaga 600 lisaandmebaasipäringut/s.
Madala prioriteediga 30 % (eellaadimine, partii, roomikud) osa, mis lükatakse koormusjaoturis tagasi sõnumiga „proovi hiljem uuesti“.
Raske funktsioon lisab päringu kohta 20 ms CPU-d ja ühe andmebaasipäringu. Väljas = kontrollitud lihtsustamine.
Võtab kasutusele viimase hea järgu uuel pargil (5 min, arveldatakse kahekordselt) ja lülitab seejärel liikluse ümber. Uuesti vajutamine käivitab ettevalmistuse uuesti; kui halba järku ei ole töös, maksab see vaid raha.
Näitajad
Veamäär
0,00%
normaalne
p99 latentsus
342ms
normaalne
Veaeelarvet jäänud (30 päeva)
50,0%
normaalne
Pargi kasutus
52%
normaalne
Põlemiskiirus (1 h)
0,0 ×
Päringud
1125 req/s
Teenindavad instantsid
10
Käivituvad instantsid
0
Vahemälu tabamuse määr
77 %
Andmebaasi kasutus
19 %
Vähendatud liiklus
0 %
Pargi kulu
4,00 $/h
Kulu siiani
0,00 $
Vahemälus olevate vastuste keskmine vanus
30 s
Liiklus halval versioonil
0 %
Soovitused saadaval
100 %
Trend
Kriisistsenaariumid
Tase 1 · Halb väljalase
Kell 09:10 läheb välja uus versioon. Kuu on olnud juba raske: veaeelarvet on alles vaid 20 %. Minutid pärast juurutamist lööb põlemiskiiruse teavitus häire. Kaitse eelarvet.
Veaeelarvet jäänud lõpuks ≥ 18,5 %
Keskmine veamäär ≤ 0,65 % pärast juurutamist
Pargi kulu ≤ $9,50
Tase 2 · Äkiline rahvahulk
Teenuse link levib kiiresti ja liiklustippu oodatakse mõnel hetkel täna hommikul — keegi ei tea millal ega kui suurt. Uute instantside käivitamine võtab täna 8 minutit. Kui tipp tuleb, hoia vead ja latentsus väikesed, põletamata raha jõudeolevale võimsusele.
Keskmine veamäär ≤ 0,2 %
Keskmine p99 latentsus ≤ 400 ms
Keskmine vähendatud liiklus ≤ 5 %
Kogukulu ≤ $21
Soovitused saadaval ≥ 85 % ajast
Tase 3 · Külm vahemälu
Lõunatipu ajal tühjendab hooldusskript kogu vahemälu. Iga päring läheb nüüd andmebaasi, mis oli mõõtmestatud tavapärase 85 % tabamuse määra jaoks. Too teenus tagasi andmebaasi ülekoormamata.
Keskmine veamäär ≤ 1,5 %
Andmebaasi kasutus kunagi üle 90 % pärast esimest minutit
Vahemälus olevate vastuste keskmine vanus ≤ 90 s keskmiselt
Kogukulu ≤ $9
Soovitused saadaval ≥ 80 % ajast
Keskmine vähendatud liiklus ≤ 5 %
Alus — arvude taga olev mudel
Kõik seosed, mida simulaator kasutab, koos allikaga. Eeldustena märgitud konstandid on illustratiivsed kalibreeringud.
Päringud järgivad päevakõverat pluss häireid; päringute arv minutis on juhuslik (Poisson, normaalne lähendus) veidi purskelisusega.
λ(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]Eeldus: töötajate arv, teenindusajad, andmebaasi võimsus, vahemälu suurus, täitumiskiirus, hinnad ja halva versiooni veamäär on illustreerivad väärtused keskmise veebiteenuse kohta.
Erlang C: tõenäosus, et päring peab M/M/N süsteemis vaba töötajat ootama.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Ooteaja saba: tõenäosus oodata kauem kui t langeb eksponentsiaalselt; päringud, mis ootavad 2 s ajalõpu hetkel, ebaõnnestuvad. Üle võimsuse ebaõnnestub ülejääk.
p99 latentsus teenindusaja ja ooteaja kvantiilidest.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Lähendus: teenindus- ja ooteaja kvantiilide liitmine ei ole nende summa täpne p99 (see võib olla veidi liiga kõrge või madal); järjekorda käsitletakse iga minuti sees püsivana, sest päringud võtavad millisekundeid.
TTL-vahemälu: juhuslike päringute korral algab iga möödalaskmine TTL-perioodiga, mille jooksul päringud tabavad.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Muud mudelis kasutatavad tööalased konstandid.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Eeldus: töötajate arv, teenindusajad, andmebaasi võimsus, vahemälu suurus, täitumiskiirus, hinnad ja halva versiooni veamäär on illustreerivad väärtused keskmise veebiteenuse kohta.
SLO ja veaeelarve: põlemiskiirus (burn rate) ütleb, mitu korda kiiremini kui lubatud eelarvet kulutatakse.
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]
Sihtmärki jälgiv automaatskaleerija käivitusviivituse ja jahtumisajaga.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Eeldus: töötajate arv, teenindusajad, andmebaasi võimsus, vahemälu suurus, täitumiskiirus, hinnad ja halva versiooni veamäär on illustreerivad väärtused keskmise veebiteenuse kohta.
Vahemälu möödalaskmised koormavad andmebaasi; selle järjekorraviivitus aeglustab iga päringut, mis seda puudutab, ja see täidab ka rakenduse töötajad.
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 instancesEeldus: töötajate arv, teenindusajad, andmebaasi võimsus, vahemälu suurus, täitumiskiirus, hinnad ja halva versiooni veamäär on illustreerivad väärtused keskmise veebiteenuse kohta.
Juhuslikkus: seemnega mulberry32 generaator; kasutatud jaotused — ühtlane, eksponentsiaalne (pöördkumulatiivne jaotusfunktsioon), normaal (Box–Muller), Poisson (Knuth). Seeme on nähtav ja jagatav.
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