🖥️ IT-operaatiot — sivuston luotettavuus Reaaliaikainen malli
Olet päivystäjänä verkkopalvelulle: kuormantasaaja instanssilaivaston edessä, välimuisti tietokannan edessä ja 99,9 %:n saatavuustavoite. Joka minuutti malli laskee jonoviiveen, aikakatkaisut, välimuistiosumat ja tietokannan kuorman oppikirjakaavoista — sekä sen, mitä päätöksesi maksavat.
Mitä opit
Miksi viive räjähtää lähellä täyttä käyttöastetta (Erlang C) ja miksi käynnistysviiveellinen automaattinen skaalaus tulee aina myöhässä.
Miten SLO:t, virhebudjetit ja kulutusnopeushälytykset ratkaisevat, milloin palautetaan.
Miten kylmä välimuisti muuttuu tietokantakatkoksi ja mitkä vivut ostavat aikaa: rajoitus, heikennys, lämmitys.
Simulaattori
Aika 0 min
▶Instanssi palvelee
⚙Instanssi käynnistyy
!Instanssi huonolla versiolla
·Vapaa paikka
•Saapuvat pyynnöt
Säätimet
Laivaston vähimmäismäärä. Sen nostaminen käynnistää instansseja heti — ne tarvitsevat silti käynnistysviiveen ennen palvelua.
Tavoitteen seuranta käyttöasteessa; ei uutta ylöspäin skaalausta, kun instansseja vielä käynnistyy. Pois = täsmälleen minimi.
Matalampi = enemmän varaa ja enemmän kustannuksia. Mitattu käyttöaste ei voi ylittää 100 %, joten kyllästynyt laivasto kasvaa vain askel kerrallaan.
Pidempi TTL = enemmän osumia, mutta vastaukset voivat olla vanhempia (keski-ikä ≈ TTL/2).
Lataa kuumia avaimia 6 minuutin ajan (+12 % välimuistista minuutissa) hintana 600 ylimääräistä tietokantakyselyä/s.
Matalan prioriteetin 30 %:n (esihaku, erä, indeksoijat) osuus, joka hylätään kuormantasaajassa viestillä ”yritä myöhemmin uudelleen”.
Raskas ominaisuus lisää 20 ms suoritinaikaa ja yhden tietokantakyselyn pyyntöä kohti. Pois = hallittu heikennys.
Ottaa käyttöön viimeisen hyvän version uudella laivastolla (5 min, laskutetaan kahdesti) ja vaihtaa sitten liikenteen. Uudelleen painaminen käynnistää valmistelun alusta; jos huonoa versiota ei ole käytössä, se maksaa vain rahaa.
Mittarit
Virhetaso
0,00%
normaali
p99-viive
342ms
normaali
Virhebudjettia jäljellä (30 päivää)
50,0%
normaali
Laivaston käyttöaste
52%
normaali
Kulutusnopeus (1 h)
0,0 ×
Pyynnöt
1125 req/s
Palvelevat instanssit
10
Käynnistyvät instanssit
0
Välimuistin osumaprosentti
77 %
Tietokannan käyttöaste
19 %
Rajoitettu liikenne
0 %
Laivaston kustannus
4,00 $/h
Kustannus tähän mennessä
0,00 $
Välimuistissa olevien vastausten keski-ikä
30 s
Liikenne huonolla versiolla
0 %
Suositukset saatavilla
100 %
Trendi
Kriisiskenaariot
Taso 1 · Huono julkaisu
Uusi versio julkaistaan klo 09:10. Kuukausi on ollut jo rankka: virhebudjetista on jäljellä vain 20 %. Minuutteja julkaisun jälkeen kulutusnopeushälytys laukeaa. Suojaa budjetti.
Virhebudjettia jäljellä lopussa ≥ 18,5 %
Keskimääräinen virhetaso ≤ 0,65 % julkaisun jälkeen
Laivaston kustannus ≤ $9,50
Taso 2 · Äkillinen ruuhka
Linkki palveluun leviää nopeasti, ja liikennehuippua odotetaan jossain vaiheessa tänä aamuna — kukaan ei tiedä milloin tai kuinka suurta. Uusien instanssien käynnistys kestää tänään 8 minuuttia. Kun huippu tulee, pidä virheet ja viive pieninä polttamatta rahaa joutilaaseen kapasiteettiin.
Keskimääräinen virhetaso ≤ 0,2 %
Keskimääräinen p99-viive ≤ 400 ms
Keskimääräinen rajoitettu liikenne ≤ 5 %
Kokonaiskustannus ≤ $21
Suositukset saatavilla ≥ 85 % ajasta
Taso 3 · Kylmä välimuisti
Keskipäivän huipulla huoltoskripti tyhjentää koko välimuistin. Jokainen pyyntö menee nyt tietokantaan, joka oli mitoitettu tavanomaiselle 85 %:n osumaprosentille. Palauta palvelu ylikuormittamatta tietokantaa.
Keskimääräinen virhetaso ≤ 1,5 %
Tietokannan käyttöaste ei koskaan yli 90 % ensimmäisen minuutin jälkeen
Välimuistissa olevien vastausten keski-ikä ≤ 90 s keskimäärin
Kokonaiskustannus ≤ $9
Suositukset saatavilla ≥ 80 % ajasta
Keskimääräinen rajoitettu liikenne ≤ 5 %
Perusta — lukujen takana oleva malli
Kaikki simulaattorin käyttämät yhteydet lähteineen. Oletuksiksi merkityt vakiot ovat havainnollistavia kalibrointeja.
Pyynnöt noudattavat vuorokausikäyrää plus häiriöitä; minuuttikohtainen määrä on satunnainen (Poisson, normaaliapproksimaatio) pienellä purskeisuudella.
λ(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]Oletus: työntekijämäärät, palveluajat, tietokannan kapasiteetti, välimuistin koko, täyttönopeus, hinnat ja huonon version virhetaso ovat havainnollistavia arvoja keskikokoiselle verkkopalvelulle.
Erlang C: todennäköisyys, että pyynnön on odotettava vapaata työntekijää M/M/N-järjestelmässä.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Odotusajan häntä: todennäköisyys odottaa pidempään kuin t laskee eksponentiaalisesti; pyynnöt, jotka odottavat vielä 2 s:n aikakatkaisussa, epäonnistuvat. Kapasiteetin yli ylijäämä epäonnistuu.
p99-viive palveluajan ja odotusajan kvantiileista.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Approksimaatio: palvelu- ja odotuskvantiilien yhteenlasku ei ole niiden summan tarkka p99 (se voi olla hieman liian korkea tai matala); jonoa käsitellään jokaisen minuutin sisällä vakaana, koska pyynnöt kestävät millisekunteja.
TTL-välimuisti: satunnaisilla pyynnöillä jokainen huti aloittaa TTL-jakson, jonka aikana pyynnöt osuvat.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Mallin käyttämät muut toimintavakiot.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Oletus: työntekijämäärät, palveluajat, tietokannan kapasiteetti, välimuistin koko, täyttönopeus, hinnat ja huonon version virhetaso ovat havainnollistavia arvoja keskikokoiselle verkkopalvelulle.
SLO ja virhebudjetti: kulutusnopeus (burn rate) kertoo, kuinka monta kertaa sallittua nopeammin budjettia kulutetaan.
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]
Tavoitetta seuraava automaattinen skaalain käynnistysviiveellä ja jäähtymisajalla.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Oletus: työntekijämäärät, palveluajat, tietokannan kapasiteetti, välimuistin koko, täyttönopeus, hinnat ja huonon version virhetaso ovat havainnollistavia arvoja keskikokoiselle verkkopalvelulle.
Välimuistihudit kuormittavat tietokantaa; sen jonoviive hidastaa jokaista siihen osuvaa pyyntöä, mikä täyttää myös sovellustyöntekijät.
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 instancesOletus: työntekijämäärät, palveluajat, tietokannan kapasiteetti, välimuistin koko, täyttönopeus, hinnat ja huonon version virhetaso ovat havainnollistavia arvoja keskikokoiselle verkkopalvelulle.
Satunnaisuus: siemenellä alustettu mulberry32-generaattori; käytetyt jakaumat — tasainen, eksponentiaalinen (käänteinen kertymäfunktio), normaali (Box–Muller), Poisson (Knuth). Siemen näytetään ja se on jaettavissa.
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