Operațiuni IT — fiabilitatea serviciilor (SRE) Model live

Sunteți de gardă pentru un serviciu web: un load balancer în fața unei flote de instanțe, un cache în fața unei baze de date și un obiectiv de disponibilitate de 99,9 %. În fiecare minut modelul calculează întârzierea de așteptare, timeout-urile, accesările cache-ului și încărcarea bazei de date din formule de manual — și ce costă deciziile voastre.

Ce vei învăța

Simulator

Timp 0 min
Cereri 1125 · Rata de erori 0,00% · Latența p99 342 ms · Instanțe în serviciu 10 (+0) · Rata de accesări cache 77% · Utilizarea bazei de date 19% · Buget de erori rămas (30 de zile) 50,0%⇉1125 cereri/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msUtilizarea flotei 52%Rata de accesări cache 77%Utilizarea bazei de date 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instanță în serviciu
  • Instanță în pornire
  • Instanță pe versiunea proastă
  • Loc liber
  • Cereri sosite

Comenzi

Pragul inferior al flotei. Creșterea lui lansează instanțe imediat — dar ele au totuși nevoie de întârzierea de pornire înainte să servească.

Urmărire de țintă a utilizării; nicio nouă scalare în sus cât timp instanțele încă pornesc. Oprit = exact minimul.

Mai mic = mai multă marjă și mai mult cost. Utilizarea măsurată nu poate depăși 100 %, deci o flotă saturată crește doar pas cu pas.

TTL mai lung = mai multe accesări reușite, dar răspunsurile pot fi mai vechi (vârsta medie ≈ TTL/2).

Încarcă cheile fierbinți timp de 6 minute (+12 % din cache pe minut) cu prețul a 600 de interogări suplimentare pe secundă la baza de date.

Procentul din cele 30 % cu prioritate mică (prefetch, batch, crawlere) respins la load balancer cu „reîncercați mai târziu”.

Funcția grea adaugă 20 ms de CPU și o interogare de bază de date la fiecare cerere. Oprit = degradare controlată.

Redeployează ultima versiune bună pe o flotă nouă (5 min, facturată de două ori), apoi comută traficul. Dacă apeși din nou, pregătirea reîncepe; dacă nu rulează nicio versiune proastă, doar costă bani.

Indicatori

Rata de erori
0,00%
normal
Latența p99
342ms
normal
Buget de erori rămas (30 de zile)
50,0%
normal
Utilizarea flotei
52%
normal
Rata de consum (1 h)0,0 ×
Cereri1125 req/s
Instanțe în serviciu10
Instanțe în pornire0
Rata de accesări cache77 %
Utilizarea bazei de date19 %
Trafic redus0 %
Costul flotei4,00 $/h
Cost până acum0,00 $
Vârsta medie a răspunsurilor din cache30 s
Trafic pe versiunea proastă0 %
Recomandări disponibile100 %

Tendință

Rata de erori: — %20,000,00

Scenarii de criză

Nivel 1 · Lansare defectuoasă

O versiune nouă este lansată la 09:10. Luna a fost deja grea: a mai rămas doar 20 % din bugetul de erori. La câteva minute după lansare se declanșează alerta de rată de consum. Protejați bugetul.

  • Buget de erori rămas la final ≥ 18,5 %
  • Rata medie de erori ≤ 0,65 % după lansare
  • Costul flotei ≤ 9,50 $

Nivel 2 · Aflux brusc de public

Un link către serviciu se răspândește rapid și se așteaptă un val de trafic cândva în această dimineață — nimeni nu știe când, nici cât de mare. Instanțele noi au nevoie astăzi de 8 minute să pornească. Când vine, mențineți erorile și latența scăzute, fără să ardeți bani pe capacitate inactivă.

  • Rata medie de erori ≤ 0,2 %
  • Latența medie p99 ≤ 400 ms
  • Trafic mediu redus ≤ 5 %
  • Cost total ≤ 21 $
  • Recomandări disponibile ≥ 85 % din timp

Nivel 3 · Cache rece

La vârful de la amiază, un script de întreținere golește tot cache-ul. Fiecare cerere merge acum la baza de date, dimensionată pentru rata obișnuită de 85 % accesări. Readuceți serviciul fără a supraîncărca baza de date.

  • Rata medie de erori ≤ 1,5 %
  • Utilizarea bazei de date niciodată peste 90 % după primul minut
  • Vârsta medie a răspunsurilor din cache ≤ 90 s în medie
  • Cost total ≤ 9 $
  • Recomandări disponibile ≥ 80 % din timp
  • Trafic mediu redus ≤ 5 %

Baza — modelul din spatele cifrelor

Fiecare relație folosită de simulator, cu sursa ei. Constantele marcate ca ipoteze sunt calibrări ilustrative.

Cererile urmează o curbă zilnică plus perturbări; numărul pe minut este aleatoriu (Poisson, aproximare normală) cu puțină 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]Ipoteză: numărul de workeri, timpii de servire, capacitatea bazei de date, mărimea cache-ului, viteza de reumplere, prețurile și rata de erori a versiunii proaste sunt valori ilustrative pentru un serviciu web de mărime medie.
Erlang C: probabilitatea ca o cerere să trebuiască să aștepte un worker liber într-un sistem M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Coada timpului de așteptare: șansa de a aștepta mai mult de t scade exponențial; cererile încă în așteptare la timeout-ul de 2 s eșuează. Peste capacitate, excesul eșuează.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
Latența p99 din cuantilele timpului de servire și ale timpului de așteptare.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Aproximare: adunarea cuantilelor de serviciu și de așteptare nu dă p99 exact al sumei lor (poate fi puțin mai mare sau mai mică); coada este tratată ca staționară în fiecare minut, deoarece cererile durează milisecunde.
Legea lui Little: workeri ocupați = rata de sosire × timpul în serviciu.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
Cache cu TTL: cu cereri aleatorii, fiecare ratare începe o perioadă TTL în care cererile găsesc răspunsul.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Ratările din cache încarcă baza de date; întârzierea ei de așteptare încetinește fiecare cerere care o atinge, ceea ce umple și workerii aplicației.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Ipoteză: numărul de workeri, timpii de servire, capacitatea bazei de date, mărimea cache-ului, viteza de reumplere, prețurile și rata de erori a versiunii proaste sunt valori ilustrative pentru un serviciu web de mărime medie.
SLO și buget de erori: rata de consum arată de câte ori mai repede decât se permite este cheltuit bugetul.
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 cu urmărire de țintă, cu întârziere de pornire și perioadă de răcire (cooldown).
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Ipoteză: numărul de workeri, timpii de servire, capacitatea bazei de date, mărimea cache-ului, viteza de reumplere, prețurile și rata de erori a versiunii proaste sunt valori ilustrative pentru un serviciu web de mărime medie.
Alte constante de funcționare folosite de model.
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 instancesIpoteză: numărul de workeri, timpii de servire, capacitatea bazei de date, mărimea cache-ului, viteza de reumplere, prețurile și rata de erori a versiunii proaste sunt valori ilustrative pentru un serviciu web de mărime medie.

Aleatoriu: un generator mulberry32 cu seed; distribuțiile folosite — uniformă, exponențială (CDF inversă), normală (Box–Muller), Poisson (Knuth). Seed-ul este afișat și poate fi partajat.

Surse

  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

Cine face asta ca meserie

Model educațional — nu pentru decizii operaționale. Site-urile reale calibrează fiecare constantă la propriile echipamente și date.