IT-drift — site reliability Live-model

Du har vagten for en webtjeneste: en load balancer foran en flåde af instanser, en cache foran en database og et tilgængelighedsmål på 99,9 %. Hvert minut beregner modellen køforsinkelse, timeouts, cache-hits og databasebelastning ud fra lærebogsformler — og hvad dine beslutninger koster.

Det lærer du

Simulator

Tid 0 min
Requests 1125 · Fejlrate 0,00% · p99-latens 342 ms · Instanser i drift 10 (+0) · Cache-hitrate 77% · Databaseudnyttelse 19% · Fejlbudget tilbage (30 dage) 50,0%⇉1125 req/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msFlådeudnyttelse 52%Cache-hitrate 77%Databaseudnyttelse 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instans i drift
  • Instans under opstart
  • Instans på det dårlige build
  • Ledig plads
  • Indkommende requests

Betjening

Bund for flåden. At hæve den starter instanser med det samme — de skal stadig bruge opstartsforsinkelsen, før de betjener.

Målfølgning på udnyttelse; ingen ny opskalering, mens instanser stadig starter. Fra = præcis minimum.

Lavere = mere luft og flere omkostninger. Målt udnyttelse kan ikke overstige 100 %, så en mættet flåde vokser kun trin for trin.

Længere TTL = flere hits, men svar kan være ældre (middelalder ≈ TTL/2).

Indlæser varme nøgler i 6 minutter (+12 % af cachen pr. minut) til en pris af 600 ekstra databaseforespørgsler/s.

Andel af de 30 % med lav prioritet (prefetch, batch, crawlere), der afvises ved load balanceren med “prøv igen senere”.

Den tunge funktion tilføjer 20 ms CPU og én databaseforespørgsel pr. request. Fra = kontrolleret nedgradering.

Udruller den sidste gode build på en ny flåde (5 min, faktureres dobbelt) og skifter derefter trafikken. Et nyt tryk genstarter forberedelsen; hvis ingen dårlig build er i drift, koster det kun penge.

Indikatorer

Fejlrate
0,00%
normal
p99-latens
342ms
normal
Fejlbudget tilbage (30 dage)
50,0%
normal
Flådeudnyttelse
52%
normal
Burn rate (1 t)0,0 ×
Requests1125 req/s
Instanser i drift10
Instanser under opstart0
Cache-hitrate77 %
Databaseudnyttelse19 %
Afvist trafik0 %
Flådens omkostninger4,00 $/h
Omkostninger indtil nu0,00 $
Middelalder af cachede svar30 s
Trafik på det dårlige build0 %
Anbefalinger tilgængelige100 %

Tendens

Fejlrate: — %20,000,00

Krisescenarier

Niveau 1 · Dårlig udgivelse

Et nyt build udrulles kl. 09:10. Måneden har allerede været hård: kun 20 % af fejlbudgettet er tilbage. Minutter efter udrulningen udløses burn-rate-alarmen. Beskyt budgettet.

  • Fejlbudget tilbage til sidst ≥ 18,5 %
  • Gennemsnitlig fejlrate ≤ 0,65 % efter udrulningen
  • Flådens omkostninger ≤ $9,50

Niveau 2 · Pludseligt tilløb

Et link til tjenesten spreder sig hurtigt, og en trafikbølge ventes på et tidspunkt i løbet af formiddagen — ingen ved hvornår eller hvor stor. Nye instanser skal i dag bruge 8 minutter på at starte. Når den kommer, skal du holde fejl og latenstid nede uden at brænde penge af på ledig kapacitet.

  • Gennemsnitlig fejlrate ≤ 0,2 %
  • Gennemsnitlig p99-latens ≤ 400 ms
  • Gennemsnitlig afvist trafik ≤ 5 %
  • Samlede omkostninger ≤ $21
  • Anbefalinger tilgængelige ≥ 85 % af tiden

Niveau 3 · Kold cache

Ved middagsspidsen tømmer et vedligeholdelsesscript hele cachen. Hver request går nu til databasen, som var dimensioneret til den sædvanlige hitrate på 85 %. Få tjenesten tilbage uden at overbelaste databasen.

  • Gennemsnitlig fejlrate ≤ 1,5 %
  • Databaseudnyttelse aldrig over 90 % efter første minut
  • Middelalder af cachede svar ≤ 90 s i gennemsnit
  • Samlede omkostninger ≤ $9
  • Anbefalinger tilgængelige ≥ 80 % af tiden
  • Gennemsnitlig afvist trafik ≤ 5 %

Grundlag — modellen bag tallene

Alle sammenhænge, simulatoren bruger, med deres kilde. Konstanter markeret som antagelser er illustrative kalibreringer.

Requests følger en døgnkurve plus forstyrrelser; antallet pr. minut er tilfældigt (Poisson, normaltilnærmelse) med lidt burstighed.
λ(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]Antagelse: antal workers, servicetider, databasekapacitet, cachestørrelse, genopfyldningshastighed, priser og det dårlige builds fejlrate er illustrative værdier for en mellemstor webtjeneste.
Erlang C: sandsynligheden for, at en request skal vente på en ledig worker i et M/M/N-system.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Ventetidens hale: sandsynligheden for at vente længere end t falder eksponentielt; requests, der stadig venter ved timeouten på 2 s, fejler. Ud over kapaciteten fejler overskuddet.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
p99-latens ud fra kvantilerne for servicetid og ventetid.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Tilnærmelse: at lægge service- og ventekvantilerne sammen er ikke den nøjagtige p99 af deres sum (den kan være lidt for høj eller lav); køen behandles som stabil inden for hvert minut, fordi forespørgsler tager millisekunder.
Littles lov: optagede workers = ankomstrate × tid i service.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
TTL-cache: med tilfældige requests starter hvert miss en TTL-periode, hvor requests rammer.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Øvrige driftskonstanter, som modellen bruger.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Antagelse: antal workers, servicetider, databasekapacitet, cachestørrelse, genopfyldningshastighed, priser og det dårlige builds fejlrate er illustrative værdier for en mellemstor webtjeneste.
SLO og fejlbudget: burn rate fortæller, hvor mange gange hurtigere end tilladt budgettet bruges.
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]
Målfølgende autoskalering med opstartsforsinkelse og afkøling.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Antagelse: antal workers, servicetider, databasekapacitet, cachestørrelse, genopfyldningshastighed, priser og det dårlige builds fejlrate er illustrative værdier for en mellemstor webtjeneste.
Cache-misses belaster databasen; dens køforsinkelse sænker hver request, der berører den, hvilket også fylder app-workerne.
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 instancesAntagelse: antal workers, servicetider, databasekapacitet, cachestørrelse, genopfyldningshastighed, priser og det dårlige builds fejlrate er illustrative værdier for en mellemstor webtjeneste.

Tilfældighed: en seedet mulberry32-generator; anvendte fordelinger — uniform, eksponentiel (invers CDF), normal (Box–Muller), Poisson (Knuth). Seed vises og kan deles.

Kilder

  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

Hvem arbejder med dette

Uddannelsesmodel — ikke til operative beslutninger. Rigtige anlæg kalibrerer hver konstant efter deres eget udstyr og data.