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

Simulaattori

Aika 0 min
Pyynnöt 1125 · Virhetaso 0,00% · p99-viive 342 ms · Palvelevat instanssit 10 (+0) · Välimuistin osumaprosentti 77% · Tietokannan käyttöaste 19% · Virhebudjettia jäljellä (30 päivää) 50,0%⇉1125 pyyntöä/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msLaivaston käyttöaste 52%Välimuistin osumaprosentti 77%Tietokannan käyttöaste 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • 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öt1125 req/s
Palvelevat instanssit10
Käynnistyvät instanssit0
Välimuistin osumaprosentti77 %
Tietokannan käyttöaste19 %
Rajoitettu liikenne0 %
Laivaston kustannus4,00 $/h
Kustannus tähän mennessä0,00 $
Välimuistissa olevien vastausten keski-ikä30 s
Liikenne huonolla versiolla0 %
Suositukset saatavilla100 %

Trendi

Virhetaso: — %20,000,00

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.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
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.
Littlen laki: varatut työntekijät = saapumisnopeus × palveluaika.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
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.

Lähteet

  1. Site Reliability Engineering — Ch. 3 Embracing Risk (error budgets), Ch. 4 Service Level Objectives — Beyer, Jones, Petoff, Murphy (eds.), O'Reilly, 2016
  2. The Site Reliability Workbook — Ch. 5 Alerting on SLOs (burn rate; 14.4× over 1 h = 2 % of a 30-day budget) — Beyer, Murphy, Rensin, Kawahara, Thorne (eds.), O'Reilly, 2018
  3. Teletraffic Engineering Handbook — Erlang C formula; waiting-time distribution for M/M/n, FCFS — ITU-D Study Group 2 Question 16/2 (V. B. Iversen), 2005
  4. J. D. C. Little — A Proof for the Queuing Formula: L = λW — Operations Research 9(3):383–387, 1961
  5. J. Jung, A. W. Berger, H. Balakrishnan — Modeling TTL-based Internet Caches — IEEE INFOCOM 2003, 2003
  6. 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

Kuka tekee tätä työkseen

Opetusmalli — ei operatiivisten päätösten tekoon. Todelliset laitokset kalibroivat jokaisen vakion omien laitteidensa ja tietojensa mukaan.