Operazzjonijiet tal-IT — affidabbiltà tas-sit Mudell ħaj

Inti on-call għal servizz web: load balancer quddiem flotta ta' istanzi, cache quddiem database, u objettiv ta' disponibbiltà ta' 99.9 %. Kull minuta l-mudell jikkalkula d-dewmien tal-kju, timeouts, cache hits u tagħbija tad-database minn formuli tal-kotba — u kemm jiswew id-deċiżjonijiet tiegħek.

X'se titgħallem

Simulatur

Ħin 0 min
Talbiet 1125 · Rata tal-iżbalji 0.00% · Latenza p99 342 ms · Istanzi qed iservu 10 (+0) · Rata tal-cache hit 77% · Użu tad-database 19% · Baġit tal-iżbalji li fadal (30 jum) 50.0%⇉1125 talb/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msUżu tal-flotta 52%Rata tal-cache hit 77%Użu tad-database 19%⚠ 0.00% · 🔥 0.0×50%$ 4.00/h · Σ $0.00
  • Istanza qed isservi
  • Istanza qed tibda
  • Istanza fuq il-build ħażina
  • Slot liberu
  • Talbiet li jaslu

Kontrolli

Qiegħ għall-flotta. Li żżidu tniedi istanzi minnufih — xorta jeħtieġu d-dewmien tal-boot qabel iservu.

Target tracking fuq l-użu; ebda scale-out ġdid sakemm l-istanzi jkunu għadhom qed jibdew. Mitfi = eżattament il-minimu.

Aktar baxx = aktar spazju u aktar spiża. L-użu mkejjel ma jistax jaqbeż 100 %, allura flotta saturata tikber biss pass pass.

TTL itwal = aktar hits, iżda t-tweġibiet jistgħu jkunu eqdem (età medja ≈ TTL/2).

Iġorr ċwievet sħan għal 6 minuti (+12 % tal-cache kull minuta) bi prezz ta' 600 mistoqsija żejda tad-database/s.

Sehem tat-30 % b'prijorità baxxa (prefetch, batch, crawlers) miċħud fil-load balancer b'"erġa' pprova aktar tard".

Il-funzjoni tqila żżid 20 ms ta' CPU u mistoqsija waħda tad-database għal kull talba. Mitfi = degradazzjoni gradwali.

Terġa' tqiegħed l-aħħar build tajjeb fuq flotta friska (5 min, iffatturat darbtejn), imbagħad jaqleb it-traffiku. Meta terġa' tagħfas terġa' tibda t-tħejjija; mingħajr build ħażin attiv jiswa biss flus.

Indikaturi

Rata tal-iżbalji
0.00%
normali
Latenza p99
342ms
normali
Baġit tal-iżbalji li fadal (30 jum)
50.0%
normali
Użu tal-flotta
52%
normali
Rata tal-burn (siegħa)0.0 ×
Talbiet1125 req/s
Istanzi qed iservu10
Istanzi qed jibdew0
Rata tal-cache hit77 %
Użu tad-database19 %
Traffiku mormi0 %
Spiża tal-flotta4.00 $/h
Spiża s'issa0.00 $
Età medja tat-tweġibiet fil-cache30 s
Traffiku fuq il-build ħażina0 %
Rakkomandazzjonijiet disponibbli100 %

Xejra

Rata tal-iżbalji: — %20.000.00

Xenarji ta' kriżi

Livell 1 · Release ħażina

Build ġdida toħroġ fid-09:10. Ix-xahar diġà kien iebes: fadal biss 20 % tal-baġit tal-iżbalji. Minuti wara d-deploy tinxtegħel l-allerta tar-rata tal-burn. Ipproteġi l-baġit.

  • Baġit tal-iżbalji li fadal fl-aħħar ≥ 18.5 %
  • Rata medja tal-iżbalji ≤ 0.65 % wara d-deploy
  • Spiża tal-flotta ≤ $9.50

Livell 2 · Folla f'daqqa

Link għas-servizz qed jinfirex malajr u qed jiġi mistenni żjieda fit-traffiku xi ħin dalgħodu — ħadd ma jaf meta, jew kemm se tkun kbira. Istanzi ġodda llum jeħtieġu 8 minuti biex jibdew. Meta tasal, żomm l-iżbalji u l-latenza baxxi mingħajr ma taħli l-flus fuq kapaċità li ma tintużax.

  • Rata medja tal-iżbalji ≤ 0.2 %
  • Latenza medja p99 ≤ 400 ms
  • Traffiku medju mormi ≤ 5 %
  • Spiża totali ≤ $21
  • Rakkomandazzjonijiet disponibbli ≥ 85 % tal-ħin

Livell 3 · Cache kiesħa

Fil-quċċata ta' nofsinhar script tal-manutenzjoni jbattal il-cache kollha. Kull talba issa tmur għad-database, li kienet iddisinjata għar-rata tas-soltu ta' 85 % hits. Erġa' ġib is-servizz mingħajr ma tgħabbi żżejjed id-database.

  • Rata medja tal-iżbalji ≤ 1.5 %
  • Użu tad-database qatt 'il fuq minn 90 % wara l-ewwel minuta
  • Età medja tat-tweġibiet fil-cache ≤ 90 s fil-medja
  • Spiża totali ≤ $9
  • Rakkomandazzjonijiet disponibbli ≥ 80 % tal-ħin
  • Traffiku medju mormi ≤ 5 %

Bażi — il-mudell wara n-numri

Kull relazzjoni li juża s-simulatur, bis-sors tagħha. Il-kostanti mmarkati bħala assunzjonijiet huma kalibrazzjonijiet illustrattivi.

It-talbiet isegwu kurva ta' kuljum flimkien ma' disturbi; l-għadd kull minuta huwa każwali (Poisson, approssimazzjoni normali) b'ftit 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]Suppożizzjoni: l-għadd ta' workers, iż-żminijiet tas-servizz, il-kapaċità tad-database, id-daqs tal-cache, il-veloċità tal-mili mill-ġdid, il-prezzijiet u r-rata tal-iżbalji tal-build ħażina huma valuri illustrattivi għal servizz web ta' daqs medju.
Erlang C: il-probabbiltà li talba jkollha tistenna worker liberu f'sistema M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Denb tal-ħin tal-attesa: ċ-ċans li tistenna aktar minn t jonqos b'mod eksponenzjali; talbiet li għadhom jistennew fit-timeout ta' 2 s jfallu. 'L hemm mill-kapaċità, l-eċċess jfalli.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
Latenza p99 mill-kwantili tal-ħin tas-servizz u tal-ħin tal-attesa.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Approssimazzjoni: li tgħaqqad il-kwantili tas-servizz u tal-istennija mhix il-p99 eżatta tas-somma tagħhom (tista' tkun ftit għolja jew baxxa); il-kju jitqies stabbli f'kull minuta għax it-talbiet jieħdu millisekondi.
Liġi ta' Little: workers okkupati = rata tal-wasla × ħin fis-servizz.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
Cache TTL: b'talbiet każwali, kull miss jibda perjodu TTL li matulu t-talbiet jaqbdu.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Il-misses tal-cache jgħabbu d-database; id-dewmien tal-kju tagħha jtardja kull talba li tmisha, u dan jimla wkoll il-workers tal-app.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Suppożizzjoni: l-għadd ta' workers, iż-żminijiet tas-servizz, il-kapaċità tad-database, id-daqs tal-cache, il-veloċità tal-mili mill-ġdid, il-prezzijiet u r-rata tal-iżbalji tal-build ħażina huma valuri illustrattivi għal servizz web ta' daqs medju.
SLO u baġit tal-iżbalji: ir-rata tal-burn tgħid kemm-il darba aktar malajr milli permess qed jintefaq il-baġit.
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]
Autoscaler b'target tracking b'dewmien tal-boot u cooldown.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Suppożizzjoni: l-għadd ta' workers, iż-żminijiet tas-servizz, il-kapaċità tad-database, id-daqs tal-cache, il-veloċità tal-mili mill-ġdid, il-prezzijiet u r-rata tal-iżbalji tal-build ħażina huma valuri illustrattivi għal servizz web ta' daqs medju.
Kostanti operattivi oħra użati mill-mudell.
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 instancesSuppożizzjoni: l-għadd ta' workers, iż-żminijiet tas-servizz, il-kapaċità tad-database, id-daqs tal-cache, il-veloċità tal-mili mill-ġdid, il-prezzijiet u r-rata tal-iżbalji tal-build ħażina huma valuri illustrattivi għal servizz web ta' daqs medju.

Każwalità: ġeneratur mulberry32 b'seed; distribuzzjonijiet użati — uniformi, esponenzjali (CDF invers), normali (Box–Muller), Poisson (Knuth). Is-seed jintwera u jista' jinqasam.

Sorsi

  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

Min jagħmel dan bħala xogħol

Mudell edukattiv — mhux għal deċiżjonijiet operazzjonali. Siti reali jikkalibraw kull kostanti mat-tagħmir u d-dejta tagħhom stess.