Operacions de TI: fiabilitat de llocs web Model en directe

Estàs de guàrdia d'un servei web: un balancejador de càrrega davant d'una flota d'instàncies, una memòria cau davant d'una base de dades i un objectiu de disponibilitat del 99,9 %. Cada minut el model calcula el retard de cua, els temps d'espera esgotats, els encerts de memòria cau i la càrrega de la base de dades amb fórmules de llibre de text, i què costen les teves decisions.

Què aprendràs

Simulador

Temps 0 min
Peticions 1125 · Taxa d'errors 0,00% · Latència p99 342 ms · Instàncies servint 10 (+0) · Taxa d'encerts de la memòria cau 77% · Utilització de la base de dades 19% · Pressupost d'errors restant (30 dies) 50,0%⇉1125 peticions/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msUtilització de la flota 52%Taxa d'encerts de la memòria cau 77%Utilització de la base de dades 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instància servint
  • Instància arrencant
  • Instància amb la compilació dolenta
  • Espai lliure
  • Peticions entrants

Controls

Terra de la flota. Pujar-lo llança instàncies de seguida, però encara necessiten el retard d'arrencada abans de servir.

Seguiment d'un objectiu d'utilització; no s'escala cap amunt mentre hi hagi instàncies arrencant. Desactivat = exactament el mínim.

Més baix = més marge i més cost. La utilització mesurada no pot superar el 100 %, de manera que una flota saturada només creix pas a pas.

TTL més llarg = més encerts, però les respostes poden ser més antigues (edat mitjana ≈ TTL/2).

Carrega les claus més usades durant 6 minuts (+12 % de la memòria cau per minut) a canvi de 600 consultes addicionals/s a la base de dades.

Part del 30 % de baixa prioritat (precàrrega, processos per lots, rastrejadors) rebutjada al balancejador de càrrega amb «torna-ho a provar més tard».

La funcionalitat pesada afegeix 20 ms de CPU i una consulta a la base de dades per petició. Desactivada = degradació controlada.

Torna a desplegar l'última versió bona en una flota nova (5 min, facturada dues vegades) i després canvia el trànsit. Si es prem de nou, es reinicia la preparació; si no hi ha cap versió dolenta activa, només costa diners.

Indicadors

Taxa d'errors
0,00%
normal
Latència p99
342ms
normal
Pressupost d'errors restant (30 dies)
50,0%
normal
Utilització de la flota
52%
normal
Taxa de consum (1 h)0,0 ×
Peticions1125 req/s
Instàncies servint10
Instàncies arrencant0
Taxa d'encerts de la memòria cau77 %
Utilització de la base de dades19 %
Trànsit descartat0 %
Cost de la flota4,00 $/h
Cost fins ara0,00 $
Edat mitjana de les respostes en memòria cau30 s
Trànsit a la compilació dolenta0 %
Recomanacions disponibles100 %

Tendència

Taxa d'errors: — %20,000,00

Escenaris de crisi

Nivell 1 · Versió dolenta

A les 09:10 es desplega una compilació nova. El mes ja ha estat dur: només queda el 20 % del pressupost d'errors. Pocs minuts després del desplegament salta l'alerta de taxa de consum. Protegeix el pressupost.

  • Pressupost d'errors restant al final ≥ 18,5 %
  • Taxa d'errors mitjana ≤ 0,65 % després del desplegament
  • Cost de la flota ≤ 9,50 $

Nivell 2 · Allau sobtada de visitants

Un enllaç al servei s’està estenent ràpidament i s’espera un pic de trànsit en algun moment d’aquest matí; ningú no sap quan ni de quina mida. Avui les instàncies noves necessiten 8 minuts per arrencar. Quan arribi, mantén els errors i la latència baixos sense malgastar diners en capacitat ociosa.

  • Taxa d'errors mitjana ≤ 0,2 %
  • Latència p99 mitjana ≤ 400 ms
  • Trànsit descartat mitjà ≤ 5 %
  • Cost total ≤ 21 $
  • Recomanacions disponibles ≥ 85 % del temps

Nivell 3 · Memòria cau freda

Al pic del migdia un script de manteniment buida tota la memòria cau. Ara cada petició va a la base de dades, que estava dimensionada per a l'habitual 85 % d'encerts. Recupera el servei sense sobrecarregar la base de dades.

  • Taxa d'errors mitjana ≤ 1,5 %
  • Utilització de la base de dades mai per sobre del 90 % després del primer minut
  • Edat mitjana de les respostes en memòria cau ≤ 90 s de mitjana
  • Cost total ≤ 9 $
  • Recomanacions disponibles ≥ 80 % del temps
  • Trànsit descartat mitjà ≤ 5 %

Base: el model darrere de les xifres

Totes les relacions que fa servir el simulador, amb la seva font. Les constants marcades com a supòsits són calibratges il·lustratius.

Les peticions segueixen una corba diària més pertorbacions; el recompte per minut és aleatori (Poisson, aproximació normal) amb una mica de ràfegues.
λ(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]Supòsit: el nombre de workers, els temps de servei, la capacitat de la base de dades, la mida de la memòria cau, la velocitat de reompliment, els preus i la taxa d'errors de la compilació dolenta són valors il·lustratius d'un servei web mitjà.
Erlang C: la probabilitat que una petició hagi d'esperar un worker lliure en un sistema M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Cua del temps d'espera: la probabilitat d'esperar més de t decau exponencialment; les peticions que encara esperen al límit de 2 s fallen. Més enllà de la capacitat, l'excés falla.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
Latència p99 a partir dels quantils del temps de servei i del temps d'espera.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Aproximació: sumar els quantils de servei i d'espera no és el p99 exacte de la seva suma (pot sortir una mica alt o baix); la cua es tracta com a estacionària dins de cada minut perquè les peticions duren mil·lisegons.
Llei de Little: workers ocupats = taxa d'arribada × temps de servei.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
Memòria cau amb TTL: amb peticions aleatòries, cada fallada inicia un període de TTL durant el qual les peticions encerten.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Les fallades de memòria cau carreguen la base de dades; el seu retard de cua alenteix cada petició que la toca, i això també omple els workers de l'aplicació.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Supòsit: el nombre de workers, els temps de servei, la capacitat de la base de dades, la mida de la memòria cau, la velocitat de reompliment, els preus i la taxa d'errors de la compilació dolenta són valors il·lustratius d'un servei web mitjà.
SLO i pressupost d'errors: la taxa de consum diu quantes vegades més de pressa del permès s'està gastant el pressupost.
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]
Escalador automàtic de seguiment d'objectiu amb retard d'arrencada i temps de refredament.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Supòsit: el nombre de workers, els temps de servei, la capacitat de la base de dades, la mida de la memòria cau, la velocitat de reompliment, els preus i la taxa d'errors de la compilació dolenta són valors il·lustratius d'un servei web mitjà.
Altres constants d'operació que fa servir el 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 instancesSupòsit: el nombre de workers, els temps de servei, la capacitat de la base de dades, la mida de la memòria cau, la velocitat de reompliment, els preus i la taxa d'errors de la compilació dolenta són valors il·lustratius d'un servei web mitjà.

Aleatorietat: un generador mulberry32 amb llavor; distribucions utilitzades: uniforme, exponencial (CDF inversa), normal (Box–Muller), Poisson (Knuth). La llavor es mostra i es pot compartir.

Fonts

  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

Qui es dedica a això professionalment

Model educatiu: no apte per a decisions operatives. Les instal·lacions reals calibren cada constant amb els seus propis equips i dades.