IT-bedrywighede — betroubaarheidsingenieurswese Lewendige model

Jy is oproepbaar vir 'n webdiens: 'n lasbalanseerder voor 'n vloot instansies, 'n cache voor 'n databasis, en 'n 99,9 % beskikbaarheidsdoelwit. Elke minuut bereken die model tou-vertraging, uittelings, cache-treffers en databasislas uit handboekformules — en wat jou besluite kos.

Wat jy sal leer

Simuleerder

Tyd 0 min
Versoeke 1125 · Foutkoers 0,00% · p99-latensie 342 ms · Instansies wat bedien 10 (+0) · Cache-treffertempo 77% · Databasisbenutting 19% · Foutbegroting oor (30 dae) 50,0%⇉1125 versoeke/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msVlootbenutting 52%Cache-treffertempo 77%Databasisbenutting 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instansie wat bedien
  • Instansie wat opstart
  • Instansie op die slegte bou
  • Vrye gleuf
  • Inkomende versoeke

Kontroles

Vloer vir die vloot. Om dit te verhoog begin instansies dadelik — hulle het steeds die opstartvertraging nodig voor hulle bedien.

Teikenvolging op benutting; geen nuwe uitskaal terwyl instansies nog opstart nie. Af = presies die minimum.

Laer = meer ruimte en meer koste. Gemete benutting kan nie 100 % oorskry nie, so 'n versadigde vloot groei net stap vir stap.

Langer TTL = meer treffers, maar antwoorde kan ouer wees (gemiddelde ouderdom ≈ TTL/2).

Laai warm sleutels vir 6 minute (+12 % van die cache per minuut) teen die prys van 600 ekstra databasisnavrae/s.

Deel van die lae-prioriteit 30 % (vooraflaai, bondel, kruipers) wat by die lasbalanseerder met “probeer later weer” verwerp word.

Die swaar kenmerk voeg 20 ms SVE en een databasisnavraag per versoek by. Af = grasieuse degradering.

Ontplooi die laaste goeie weergawe op 'n vars vloot (5 min, twee keer gehef), skakel dan die verkeer oor. Weer druk begin die voorbereiding oor; as geen slegte weergawe aktief is nie, kos dit net geld.

Aanwysers

Foutkoers
0,00%
normaal
p99-latensie
342ms
normaal
Foutbegroting oor (30 dae)
50,0%
normaal
Vlootbenutting
52%
normaal
Brandtempo (1 h)0,0 ×
Versoeke1125 req/s
Instansies wat bedien10
Instansies wat opstart0
Cache-treffertempo77 %
Databasisbenutting19 %
Verkeer afgestort0 %
Vlootkoste4,00 $/h
Koste tot dusver0,00 $
Gemiddelde ouderdom van gekaste antwoorde30 s
Verkeer op die slegte bou0 %
Aanbevelings beskikbaar100 %

Tendens

Foutkoers: — %20,000,00

Krisisscenario's

Vlak 1 · Slegte vrystelling

'n Nuwe bou gaan om 09:10 uit. Die maand was reeds moeilik: net 20 % van die foutbegroting is oor. Minute ná die ontplooiing lui die brandtempo-oproep. Beskerm die begroting.

  • Foutbegroting oor aan die einde ≥ 18,5 %
  • Gemiddelde foutkoers ≤ 0,65 % ná die ontplooiing
  • Vlootkoste ≤ $9,50

Vlak 2 · Skielike skare

'n Skakel na die diens versprei vinnig en 'n verkeerstoename word êrens vanoggend verwag — niemand weet wanneer, of hoe groot nie. Nuwe instansies het vandag 8 minute nodig om te begin. Wanneer dit kom, hou foute en latensie laag sonder om geld op ledige kapasiteit te verbrand.

  • Gemiddelde foutkoers ≤ 0,2 %
  • Gemiddelde p99-latensie ≤ 400 ms
  • Gemiddelde verkeer afgestort ≤ 5 %
  • Totale koste ≤ $21
  • Aanbevelings beskikbaar ≥ 85 % van die tyd

Vlak 3 · Koue cache

By die middagpiek spoel 'n onderhoudskrip die hele cache leeg. Elke versoek gaan nou na die databasis, wat vir die gewone 85 % treffertempo gedimensioneer is. Kry die diens terug sonder om die databasis te oorlaai.

  • Gemiddelde foutkoers ≤ 1,5 %
  • Databasisbenutting nooit bo 90 % ná die eerste minuut
  • Gemiddelde ouderdom van gekaste antwoorde ≤ 90 s gemiddeld
  • Totale koste ≤ $9
  • Aanbevelings beskikbaar ≥ 80 % van die tyd
  • Gemiddelde verkeer afgestort ≤ 5 %

Grondslag — die model agter die syfers

Elke verband wat die simuleerder gebruik, met sy bron. Konstantes gemerk as aannames is illustratiewe kalibrasies.

Versoeke volg 'n daaglikse kurwe plus steurings; die telling per minuut is ewekansig (Poisson, normale benadering) met 'n bietjie uitbarstings.
λ(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]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
Erlang C: die waarskynlikheid dat 'n versoek vir 'n vrye werker moet wag in 'n M/M/N-stelsel.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Wagtyd-stert: die kans om langer as t te wag daal eksponensieel; versoeke wat by die 2-s-uitteltyd nog wag, misluk. Bokant kapasiteit misluk die oorskot.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
p99-latensie uit die diensttyd- en wagtyd-kwantiele.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Benadering: om die diens- en wagkwantiele bymekaar te tel is nie die presiese p99 van hul som nie (dit kan 'n bietjie hoog of laag wees); die tou word binne elke minuut as bestendig behandel omdat versoeke millisekondes neem.
Little se wet: besige werkers = aankomstempo × tyd in diens.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL-cache: met ewekansige versoeke begin elke mis 'n TTL-tydperk waartydens versoeke tref.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Cache-mistreffers laai die databasis; sy tou-vertraging vertraag elke versoek wat dit raak, wat ook die toepassingswerkers vul.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
SLO en foutbegroting: die brandtempo sê hoeveel keer vinniger as toegelaat die begroting bestee word.
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]
Teikenvolgende outoskaleerder met 'n opstartvertraging en 'n afkoelperiode.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Aanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.
Ander bedryfskonstantes wat deur die model gebruik word.
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 instancesAanname: werkerstelle, diensttye, databasiskapasiteit, cachegrootte, hervullingspoed, pryse en die slegte bou se foutkoers is illustratiewe waardes vir 'n mediumgrootte webdiens.

Lukraakheid: 'n gesaaide mulberry32-genereerder; verdelings gebruik — uniform, eksponensieel (inverse CDF), normaal (Box–Muller), Poisson (Knuth). Die saad word gewys en kan gedeel word.

Bronne

  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

Wie doen dit vir 'n lewe

Opvoedkundige model — nie vir operasionele besluite nie. Werklike persele kalibreer elke konstante volgens hul eie toerusting en data.