🖥️ IT operations — site reliability Live na modelo
Naka-on-call ka para sa isang web service: isang load balancer sa harap ng fleet ng mga instance, isang cache sa harap ng database, at 99.9 % na availability objective. Kada minuto, kinakalkula ng modelo ang queueing delay, timeout, cache hit at load ng database mula sa mga pormula sa textbook — at kung magkano ang gastos ng iyong mga desisyon.
Ang matututuhan mo
Bakit sumasabog ang latency malapit sa buong utilization (Erlang C), at bakit laging huli ang autoscaling na may boot delay.
Paano nagpapasya ang mga SLO, error budget at burn-rate alert kung kailan mag-roll back.
Paano nagiging database outage ang malamig na cache, at anong mga pingga ang bumibili ng oras: shedding, degrading, warming.
Simulator
Oras 0 min
▶Naglilingkod ang instance
⚙Nagbo-boot ang instance
!Instance sa masamang build
·Bakanteng slot
•Mga papasok na request
Mga kontrol
Sahig ng fleet. Ang pagtataas nito ay agad na naglulunsad ng mga instance — kailangan pa rin nila ng boot delay bago maglingkod.
Target tracking sa utilization; walang bagong scale-out habang nagbo-boot pa ang mga instance. Off = eksaktong minimum.
Mas mababa = mas maluwag at mas mahal. Hindi lalampas sa 100 % ang nasusukat na utilization, kaya ang saturated na fleet ay lumalaki lamang nang hakbang-hakbang.
Mas mahabang TTL = mas maraming hit, pero maaaring mas luma ang mga sagot (karaniwang edad ≈ TTL/2).
Naglo-load ng mga hot key sa loob ng 6 na minuto (+12 % ng cache kada minuto) kapalit ng 600 dagdag na database query/s.
Bahagi ng low-priority na 30 % (prefetch, batch, crawler) na tinatanggihan sa load balancer na may “subukan muli mamaya”.
Ang mabigat na feature ay nagdaragdag ng 20 ms na CPU at isang database query kada request. Off = graceful degradation.
Ide-deploy muli ang huling maayos na build sa bagong fleet (5 min, doble ang singil), pagkatapos ay ililipat ang traffic. Ang muling pagpindot ay uulit sa paghahanda; kung walang masamang build na live, pera lang ang magagastos nito.
Mga indicator
Error rate
0.00%
normal
p99 latency
342ms
normal
Natitirang error budget (30 araw)
50.0%
normal
Utilization ng fleet
52%
normal
Burn rate (1 h)
0.0 ×
Mga request
1125 req/s
Mga instance na naglilingkod
10
Mga instance na nagbo-boot
0
Cache hit rate
77 %
Utilization ng database
19 %
Traffic na binawasan
0 %
Gastos ng fleet
4.00 $/h
Gastos sa ngayon
0.00 $
Karaniwang edad ng mga naka-cache na sagot
30 s
Traffic sa masamang build
0 %
Available ang mga rekomendasyon
100 %
Trend
Mga senaryo ng krisis
Antas 1 · Masamang release
Lumalabas ang bagong build sa 09:10. Mabigat na ang buwan: 20 % na lang ng error budget ang natitira. Ilang minuto pagkatapos ng deploy, tumutunog ang burn-rate page. Protektahan ang budget.
Natitirang error budget sa dulo ≥ 18.5 %
Karaniwang error rate ≤ 0.65 % pagkatapos ng deploy
Gastos ng fleet ≤ $9.50
Antas 2 · Biglaang dagsa
Mabilis na kumakalat ang link papunta sa serbisyo at inaasahan ang traffic surge sa isang oras ngayong umaga — walang nakakaalam kung kailan, o gaano kalaki. Ngayon, 8 minuto ang kailangan ng mga bagong instance para magsimula. Pagdating nito, panatilihing mababa ang mga error at latency nang hindi sinusunog ang pera sa idle na kapasidad.
Karaniwang error rate ≤ 0.2 %
Karaniwang p99 latency ≤ 400 ms
Karaniwang traffic na binawasan ≤ 5 %
Kabuuang gastos ≤ $21
Available ang mga rekomendasyon ≥ 85 % ng oras
Antas 3 · Malamig na cache
Sa rurok ng tanghali, binubura ng maintenance script ang buong cache. Pupunta na ngayon sa database ang bawat request, na idinisenyo para sa karaniwang 85 % hit rate. Ibalik ang serbisyo nang hindi ino-overload ang database.
Karaniwang error rate ≤ 1.5 %
Hindi kailanman lalampas sa 90 % ang utilization ng database pagkatapos ng unang minuto
Karaniwang edad ng mga naka-cache na sagot ≤ 90 s sa karaniwan
Kabuuang gastos ≤ $9
Available ang mga rekomendasyon ≥ 80 % ng oras
Karaniwang traffic na binawasan ≤ 5 %
Batayan — ang modelo sa likod ng mga numero
Bawat ugnayang ginagamit ng simulator, kasama ang pinagmulan nito. Ang mga constant na minarkahang palagay ay mga halimbawang calibration.
Sumusunod ang mga request sa arawang kurba kasama ang mga kaguluhan; random ang bilang kada minuto (Poisson, normal approximation) na may kaunting burstiness.
λ(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]Palagay: ang bilang ng worker, service time, kapasidad ng database, laki ng cache, bilis ng refill, presyo at error rate ng masamang build ay mga halimbawang halaga para sa katamtamang laking web service.
Erlang C: ang posibilidad na maghintay ang isang request ng libreng worker sa M/M/N na sistema.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Buntot ng waiting time: bumababa nang exponential ang tsansang maghintay nang higit sa t; ang mga request na naghihintay pa sa 2-s timeout ay pumapalya. Lampas sa kapasidad, pumapalya ang sobra.
p99 latency mula sa mga quantile ng service time at waiting time.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Pagtataya: ang pagdaragdag ng mga quantile ng service at paghihintay ay hindi ang eksaktong p99 ng kanilang kabuuan (maaaring bahagyang mataas o mababa); ang pila ay itinuturing na steady sa loob ng bawat minuto dahil millisecond lang ang inaabot ng mga request.
Batas ni Little: abalang worker = arrival rate × oras sa serbisyo.
TTL cache: sa random na mga request, ang bawat miss ay nagsisimula ng TTL period na ang mga request ay nagiging hit.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Iba pang operating constant na ginagamit ng modelo.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Palagay: ang bilang ng worker, service time, kapasidad ng database, laki ng cache, bilis ng refill, presyo at error rate ng masamang build ay mga halimbawang halaga para sa katamtamang laking web service.
SLO at error budget: sinasabi ng burn rate kung ilang beses na mas mabilis kaysa pinapayagan ang paggastos ng budget.
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]
Target-tracking autoscaler na may boot delay at cooldown.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Palagay: ang bilang ng worker, service time, kapasidad ng database, laki ng cache, bilis ng refill, presyo at error rate ng masamang build ay mga halimbawang halaga para sa katamtamang laking web service.
Ang mga cache miss ay nagpapabigat sa database; ang queueing delay nito ay nagpapabagal sa bawat request na tumatama rito, na pumupuno rin sa mga app worker.
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 instancesPalagay: ang bilang ng worker, service time, kapasidad ng database, laki ng cache, bilis ng refill, presyo at error rate ng masamang build ay mga halimbawang halaga para sa katamtamang laking web service.
Randomness: isang seeded na mulberry32 generator; mga distribusyong ginamit — uniform, exponential (inverse CDF), normal (Box–Muller), Poisson (Knuth). Ipinapakita at maibabahagi ang seed.
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
Modelong pang-edukasyon — hindi para sa mga desisyon sa operasyon. Kina-calibrate ng mga tunay na site ang bawat constant sa sarili nilang kagamitan at datos.