IT-operations — site reliability Live model

Je hebt storingsdienst voor een webdienst: een load balancer vóór een vloot instanties, een cache vóór een database en een beschikbaarheidsdoel van 99,9 %. Elke minuut berekent het model wachtrijvertraging, timeouts, cache-hits en databasebelasting uit leerboekformules — en wat jouw beslissingen kosten.

Wat je gaat leren

Simulator

Tijd 0 min
Requests 1125 · Foutpercentage 0,00% · p99-latentie 342 ms · Instanties in dienst 10 (+0) · Cache-hitratio 77% · Databasebelasting 19% · Foutbudget over (30 dagen) 50,0%⇉1125 req/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msBelasting van de vloot 52%Cache-hitratio 77%Databasebelasting 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instantie verwerkt
  • Instantie start op
  • Instantie op de slechte build
  • Vrije plek
  • Binnenkomende requests

Bediening

Ondergrens voor de vloot. Verhogen start meteen instanties — ze hebben nog steeds de opstartvertraging nodig voordat ze verwerken.

Target tracking op belasting; geen nieuwe opschaling zolang instanties nog opstarten. Uit = precies het minimum.

Lager = meer ruimte en meer kosten. Gemeten belasting kan niet boven 100 % komen, dus een verzadigde vloot groeit alleen stap voor stap.

Langere TTL = meer hits, maar antwoorden kunnen ouder zijn (gemiddelde leeftijd ≈ TTL/2).

Laadt hot keys gedurende 6 minuten (+12 % van de cache per minuut) ten koste van 600 extra databasequery’s/s.

Deel van de 30 % lage prioriteit (prefetch, batch, crawlers) dat bij de load balancer wordt geweigerd met “probeer het later opnieuw”.

De zware functie voegt 20 ms CPU en één databasequery per request toe. Uit = gecontroleerde degradatie.

Zet de laatste goede build uit op een verse vloot (5 min, dubbel gefactureerd) en schakelt daarna het verkeer om. Opnieuw drukken start de voorbereiding opnieuw; als er geen slechte build live is, kost het alleen geld.

Indicatoren

Foutpercentage
0,00%
normaal
p99-latentie
342ms
normaal
Foutbudget over (30 dagen)
50,0%
normaal
Belasting van de vloot
52%
normaal
Burn rate (1 h)0,0 ×
Requests1125 req/s
Instanties in dienst10
Instanties die opstarten0
Cache-hitratio77 %
Databasebelasting19 %
Afgeknepen verkeer0 %
Kosten van de vloot4,00 $/h
Kosten tot nu toe0,00 $
Gemiddelde leeftijd van gecachete antwoorden30 s
Verkeer op de slechte build0 %
Aanbevelingen beschikbaar100 %

Trend

Foutpercentage: — %20,000,00

Crisisscenario’s

Niveau 1 · Slechte release

Om 09:10 gaat een nieuwe build live. De maand is al zwaar geweest: er is nog maar 20 % van het foutbudget over. Enkele minuten na de deploy gaat de burn-rate-pagina af. Bescherm het budget.

  • Foutbudget over aan het einde ≥ 18,5 %
  • Gemiddeld foutpercentage ≤ 0,65 % na de deploy
  • Kosten van de vloot ≤ $9,50

Niveau 2 · Plotselinge drukte

Een link naar de dienst verspreidt zich snel en ergens vanochtend wordt een verkeerspiek verwacht — niemand weet wanneer, of hoe groot. Nieuwe instanties hebben vandaag 8 minuten nodig om te starten. Houd bij de piek fouten en latentie laag zonder geld te verbranden aan ongebruikte capaciteit.

  • Gemiddeld foutpercentage ≤ 0,2 %
  • Gemiddelde p99-latentie ≤ 400 ms
  • Gemiddeld afgeknepen verkeer ≤ 5 %
  • Totale kosten ≤ $21
  • Aanbevelingen beschikbaar ≥ 85 % van de tijd

Niveau 3 · Koude cache

Op de middagpiek leegt een onderhoudsscript de hele cache. Elke request gaat nu naar de database, die was gedimensioneerd op de gebruikelijke hitratio van 85 %. Krijg de dienst terug zonder de database te overbelasten.

  • Gemiddeld foutpercentage ≤ 1,5 %
  • Databasebelasting nooit boven 90 % na de eerste minuut
  • Gemiddelde leeftijd van gecachete antwoorden ≤ 90 s gemiddeld
  • Totale kosten ≤ $9
  • Aanbevelingen beschikbaar ≥ 80 % van de tijd
  • Gemiddeld afgeknepen verkeer ≤ 5 %

Grondslag — het model achter de getallen

Elk verband dat de simulator gebruikt, met bron. Constanten die als aanname zijn gemarkeerd, zijn illustratieve kalibraties.

Requests volgen een dagcurve plus verstoringen; het aantal per minuut is willekeurig (Poisson, normale benadering) met wat piekerigheid.
λ(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: aantallen workers, servicetijden, databasecapaciteit, cachegrootte, vulsnelheid, prijzen en het foutpercentage van de slechte build zijn illustratieve waarden voor een middelgrote webdienst.
Erlang C: de kans dat een request moet wachten op een vrije worker in een M/M/N-systeem.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Staart van de wachttijd: de kans op langer wachten dan t daalt exponentieel; requests die bij de timeout van 2 s nog wachten, mislukken. Boven de capaciteit mislukt het teveel.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
p99-latentie uit de kwantielen van servicetijd en wachttijd.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Benadering: het optellen van de service- en wachtkwantielen is niet de exacte p99 van hun som (die kan iets te hoog of te laag zijn); de wachtrij wordt binnen elke minuut als stabiel behandeld omdat verzoeken milliseconden duren.
Wet van Little: bezette workers = aankomstsnelheid × tijd in service.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL-cache: bij willekeurige requests start elke miss een TTL-periode waarin requests raak zijn.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Overige bedrijfsconstanten die het model gebruikt.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Aanname: aantallen workers, servicetijden, databasecapaciteit, cachegrootte, vulsnelheid, prijzen en het foutpercentage van de slechte build zijn illustratieve waarden voor een middelgrote webdienst.
SLO en foutbudget: de burn rate zegt hoeveel keer sneller dan toegestaan het budget wordt uitgegeven.
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 met een opstartvertraging en een afkoelperiode.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Aanname: aantallen workers, servicetijden, databasecapaciteit, cachegrootte, vulsnelheid, prijzen en het foutpercentage van de slechte build zijn illustratieve waarden voor een middelgrote webdienst.
Cache-misses belasten de database; de wachtrijvertraging vertraagt elke request die erbij komt, en dat vult ook de app-workers.
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: aantallen workers, servicetijden, databasecapaciteit, cachegrootte, vulsnelheid, prijzen en het foutpercentage van de slechte build zijn illustratieve waarden voor een middelgrote webdienst.

Willekeur: een mulberry32-generator met seed; gebruikte verdelingen — uniform, exponentieel (inverse CDF), normaal (Box–Muller), Poisson (Knuth). De seed wordt getoond en kan worden gedeeld.

Bronnen

  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 dit beroepsmatig doet

Educatief model — niet bedoeld voor operationele beslissingen. Echte locaties stemmen elke constante af op hun eigen apparatuur en gegevens.