🖥️ IT operacije — pouzdanost servisa (SRE) Živi model
Dežurni ste za veb servis: balanser opterećenja ispred flote instanci, keš ispred baze podataka i cilj dostupnosti od 99,9 %. Svakog minuta model iz udžbeničkih formula računa kašnjenje u redu, tajmaute, pogotke keša i opterećenje baze — i šta vas koštaju vaše odluke.
Šta ćete naučiti
Zašto latencija eksplodira blizu punog iskorišćenja (Erlang C) i zašto autoskaliranje sa kašnjenjem pokretanja uvek stiže kasno.
Kako SLO, budžeti grešaka i upozorenja o stopi potrošnje odlučuju kada se vratiti na prethodnu verziju.
Kako se hladan keš pretvara u ispad baze i koje poluge kupuju vreme: odbacivanje, degradacija, zagrevanje.
Simulator
Vreme 0 min
▶Instanca opslužuje
⚙Instanca se pokreće
!Instanca na lošoj verziji
·Slobodno mesto
•Dolazni zahtevi
Kontrole
Donja granica flote. Njeno podizanje odmah pokreće instance — ali im i dalje treba kašnjenje pokretanja pre nego što počnu da opslužuju.
Praćenje ciljnog iskorišćenja; nema novog skaliranja naviše dok se instance još pokreću. Isključeno = tačno minimum.
Niže = više rezerve i veći trošak. Mereno iskorišćenje ne može preći 100 %, pa zasićena flota raste samo korak po korak.
Duži TTL = više pogodaka, ali odgovori mogu biti stariji (prosečna starost ≈ TTL/2).
Učitava vruće ključeve 6 minuta (+12 % keša u minuti) po ceni od 600 dodatnih upita bazi u sekundi.
Udeo od 30 % niskog prioriteta (prefetch, batch, crawleri) odbijen na balanseru opterećenja sa „pokušajte kasnije“.
Zahtevna funkcija dodaje 20 ms CPU-a i jedan upit bazi po zahtevu. Isključeno = kontrolisana degradacija.
Ponovo postavlja poslednju ispravnu verziju na novu flotu (5 min, naplaćuje se dvaput), zatim prebacuje saobraćaj. Ponovni pritisak ponovo pokreće pripremu; ako nijedna loša verzija nije aktivna, samo košta novac.
Pokazatelji
Stopa grešaka
0,00%
normalno
Latencija p99
342ms
normalno
Preostali budžet grešaka (30 dana)
50,0%
normalno
Iskorišćenje flote
52%
normalno
Stopa potrošnje (1 h)
0,0 ×
Zahtevi
1125 req/s
Instance u radu
10
Instance se pokreću
0
Stopa pogodaka keša
77 %
Iskorišćenje baze podataka
19 %
Odbačen saobraćaj
0 %
Trošak flote
4,00 $/h
Dosadašnji trošak
0,00 $
Prosečna starost keširanih odgovora
30 s
Saobraćaj na lošoj verziji
0 %
Preporuke dostupne
100 %
Trend
Krizni scenariji
Nivo 1 · Loše izdanje
U 09:10 izlazi nova verzija. Mesec je već bio težak: ostalo je samo 20 % budžeta grešaka. Nekoliko minuta posle isporuke oglašava se upozorenje o stopi potrošnje. Zaštitite budžet.
Preostali budžet grešaka na kraju ≥ 18,5 %
Prosečna stopa grešaka ≤ 0,65 % posle isporuke
Trošak flote ≤ 9,50 $
Nivo 2 · Nagli naval posetilaca
Link ka servisu se brzo širi i negde tokom jutra očekuje se nalet saobraćaja — niko ne zna kada, niti koliko veliki. Nove instance danas trebaju 8 minuta da se pokrenu. Kada dođe, držite greške i kašnjenje niskim bez bacanja novca na neiskorišćen kapacitet.
Prosečna stopa grešaka ≤ 0,2 %
Prosečna latencija p99 ≤ 400 ms
Prosečan odbačen saobraćaj ≤ 5 %
Ukupni trošak ≤ 21 $
Preporuke dostupne ≥ 85 % vremena
Nivo 3 · Hladan keš
U podnevnom vrhuncu skripta za održavanje briše ceo keš. Svaki zahtev sada ide u bazu, dimenzionisanu za uobičajenu stopu pogodaka od 85 %. Vratite servis bez preopterećenja baze.
Prosečna stopa grešaka ≤ 1,5 %
Iskorišćenje baze nikad iznad 90 % posle prvog minuta
Prosečna starost keširanih odgovora ≤ 90 s u proseku
Ukupni trošak ≤ 9 $
Preporuke dostupne ≥ 80 % vremena
Prosečan odbačen saobraćaj ≤ 5 %
Osnova — model iza brojeva
Svaka relacija koju simulator koristi, sa izvorom. Konstante označene kao pretpostavke su ilustrativne kalibracije.
Zahtevi prate dnevnu krivu plus poremećaje; broj u minuti je slučajan (Poasonov, normalna aproksimacija) uz malo naletnosti.
λ(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]Pretpostavka: broj radnika, vremena opsluživanja, kapacitet baze, veličina keša, brzina punjenja, cene i stopa grešaka loše verzije su ilustrativne vrednosti za veb servis srednje veličine.
Erlang C: verovatnoća da zahtev mora da čeka slobodnog radnika u M/M/N sistemu.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Rep vremena čekanja: šansa da se čeka duže od t opada eksponencijalno; zahtevi koji i dalje čekaju pri tajmautu od 2 s ne uspevaju. Preko kapaciteta višak ne uspeva.
Latencija p99 iz kvantila vremena opsluživanja i vremena čekanja.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Aproksimacija: zbir kvantila usluge i čekanja nije tačan p99 njihovog zbira (može biti malo viši ili niži); red se unutar svakog minuta tretira kao stabilan jer zahtevi traju milisekunde.
Litlov zakon: zauzeti radnici = brzina dolazaka × vreme u opsluživanju.
Keš sa TTL: pri slučajnim zahtevima svaki promašaj započinje period TTL tokom kog zahtevi pogađaju.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Promašaji keša opterećuju bazu; njeno kašnjenje u redu usporava svaki zahtev koji je dotakne, što puni i aplikativne radnike.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Pretpostavka: broj radnika, vremena opsluživanja, kapacitet baze, veličina keša, brzina punjenja, cene i stopa grešaka loše verzije su ilustrativne vrednosti za veb servis srednje veličine.
SLO i budžet grešaka: stopa potrošnje kaže koliko puta brže od dozvoljenog se budžet troši.
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]
Autoskaler sa praćenjem cilja, kašnjenjem pokretanja i pauzom (cooldown).
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Pretpostavka: broj radnika, vremena opsluživanja, kapacitet baze, veličina keša, brzina punjenja, cene i stopa grešaka loše verzije su ilustrativne vrednosti za veb servis srednje veličine.
Ostale radne konstante koje model koristi.
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 instancesPretpostavka: broj radnika, vremena opsluživanja, kapacitet baze, veličina keša, brzina punjenja, cene i stopa grešaka loše verzije su ilustrativne vrednosti za veb servis srednje veličine.
Nasumičnost: seedovan generator mulberry32; korišćene raspodele — uniformna, eksponencijalna (inverzna CDF), normalna (Box–Muller), Poasonova (Knuth). Seed je prikazan i može se 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