Operacións de TI — fiabilidade de sitios Modelo en directo

Estás de garda dun servizo web: un balanceador de carga diante dunha flota de instancias, unha caché diante dunha base de datos e un obxectivo de dispoñibilidade do 99,9 %. Cada minuto o modelo calcula o atraso de cola, os tempos límite, os acertos de caché e a carga da base de datos con fórmulas de manual — e o que custan as túas decisións.

O que aprenderás

Simulador

Tempo 0 min
Solicitudes 1125 · Taxa de erros 0,00% · Latencia p99 342 ms · Instancias servindo 10 (+0) · Taxa de acertos da caché 77% · Utilización da base de datos 19% · Orzamento de erros restante (30 días) 50,0%⇉1125 req/s▶▶▶▶▶▶▶▶▶▶······························▶ 10 · ⚙ 0 · 52% · p99 342 msUtilización da flota 52%Taxa de acertos da caché 77%Utilización da base de datos 19%⚠ 0,00% · 🔥 0,0×50%$ 4,00/h · Σ $0,00
  • Instancia servindo
  • Instancia arrancando
  • Instancia na versión defectuosa
  • Praza libre
  • Solicitudes entrantes

Controis

Chan da flota. Subilo lanza instancias ao momento — aínda precisan o atraso de arranque antes de servir.

Seguimento de obxectivo sobre a utilización; sen novo escalado cara arriba mentres aínda estean arrancando instancias. Desactivado = exactamente o mínimo.

Menor = máis marxe e máis custo. A utilización medida non pode superar o 100 %, así que unha flota saturada só crece paso a paso.

TTL máis longo = máis acertos, pero as respostas poden ser máis vellas (idade media ≈ TTL/2).

Carga as claves máis usadas durante 6 minutos (+12 % da caché por minuto) ao prezo de 600 consultas á base de datos/s extra.

Parte do 30 % de baixa prioridade (precarga, lotes, rastrexadores) rexeitada no balanceador de carga con «téntao de novo máis tarde».

A funcionalidade pesada engade 20 ms de CPU e unha consulta á base de datos por solicitude. Desactivado = degradación controlada.

Volve despregar a última versión boa nunha flota nova (5 min, facturada dúas veces) e despois cambia o tráfico. Se se preme de novo, reinicia a preparación; sen ningunha versión mala en vivo, só custa diñeiro.

Indicadores

Taxa de erros
0,00%
normal
Latencia p99
342ms
normal
Orzamento de erros restante (30 días)
50,0%
normal
Utilización da flota
52%
normal
Taxa de consumo (1 h)0,0 ×
Solicitudes1125 req/s
Instancias servindo10
Instancias arrancando0
Taxa de acertos da caché77 %
Utilización da base de datos19 %
Tráfico descartado0 %
Custo da flota4,00 $/h
Custo ata agora0,00 $
Idade media das respostas na caché30 s
Tráfico na versión defectuosa0 %
Recomendacións dispoñibles100 %

Tendencia

Taxa de erros: — %20,000,00

Escenarios de crise

Nivel 1 · Versión defectuosa

Ás 09:10 sae unha versión nova. O mes xa foi duro: só queda o 20 % do orzamento de erros. Minutos despois do despregamento salta a alerta de taxa de consumo. Protexe o orzamento.

  • Orzamento de erros restante ao final ≥ 18,5 %
  • Taxa media de erros ≤ 0,65 % despois do despregamento
  • Custo da flota ≤ 9,50 $

Nivel 2 · Aluvión de visitas

Unha ligazón ao servizo difúndese rápido e agárdase un pico de tráfico nalgún momento desta mañá — ninguén sabe cando, nin de que tamaño. As novas instancias tardan hoxe 8 minutos en arrancar. Cando chegue, mantén baixos os erros e a latencia sen queimar diñeiro en capacidade ociosa.

  • Taxa media de erros ≤ 0,2 %
  • Latencia p99 media ≤ 400 ms
  • Tráfico medio descartado ≤ 5 %
  • Custo total ≤ 21 $
  • Recomendacións dispoñibles ≥ 85 % do tempo

Nivel 3 · Caché fría

Na punta do mediodía un script de mantemento baleira toda a caché. Cada solicitude vai agora á base de datos, dimensionada para o acerto habitual do 85 %. Devolve o servizo á normalidade sen sobrecargar a base de datos.

  • Taxa media de erros ≤ 1,5 %
  • Utilización da base de datos nunca por riba do 90 % despois do primeiro minuto
  • Idade media das respostas na caché ≤ 90 s de media
  • Custo total ≤ 9 $
  • Recomendacións dispoñibles ≥ 80 % do tempo
  • Tráfico medio descartado ≤ 5 %

Base — o modelo detrás dos números

Todas as relacións que usa o simulador, coa súa fonte. As constantes marcadas como suposicións son calibracións ilustrativas.

As solicitudes seguen unha curva diaria máis perturbacións; o número por minuto é aleatorio (Poisson, aproximación normal) con algo de ráfagas.
λ(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]Suposición: o número de workers, os tempos de servizo, a capacidade da base de datos, o tamaño da caché, a velocidade de recheo, os prezos e a taxa de erros da versión defectuosa son valores ilustrativos para un servizo web de tamaño medio.
Erlang C: a probabilidade de que unha solicitude teña que esperar por un worker libre nun sistema M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Cola do tempo de espera: a probabilidade de esperar máis de t cae exponencialmente; as solicitudes que aínda esperan no tempo límite de 2 s fallan. Máis alá da capacidade, o exceso falla.
P(W > t) = C·e^(−(N/S − λ)·t); timeouts = P(W > 2 s); a ≥ N ⇒ failed share = 1 − N/a[3]
Latencia p99 a partir dos cuantís do tempo de servizo e do tempo de espera.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Aproximación: sumar os cuantís de servizo e de espera non é o p99 exacto da súa suma (pode quedar algo alto ou baixo); a cola trátase como estacionaria dentro de cada minuto porque as solicitudes tardan milisegundos.
Lei de Little: workers ocupados = taxa de chegada × tempo de servizo.
busy workers L = λ·S ⇒ utilization = λ·S / N[4]
Caché TTL: con solicitudes aleatorias, cada fallo inicia un período TTL durante o cal as solicitudes acertan.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Os fallos de caché cargan a base de datos; o seu atraso de cola ralentiza cada solicitude que a toca, o que tamén enche os workers da aplicación.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Suposición: o número de workers, os tempos de servizo, a capacidade da base de datos, o tamaño da caché, a velocidade de recheo, os prezos e a taxa de erros da versión defectuosa son valores ilustrativos para un servizo web de tamaño medio.
SLO e orzamento de erros: a taxa de consumo di cantas veces máis rápido do permitido se está gastando o orzamento.
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]
Autoescalador de seguimento de obxectivo cun atraso de arranque e un período de arrefriamento.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Suposición: o número de workers, os tempos de servizo, a capacidade da base de datos, o tamaño da caché, a velocidade de recheo, os prezos e a taxa de erros da versión defectuosa son valores ilustrativos para un servizo web de tamaño medio.
Outras constantes de operación que usa o modelo.
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 instancesSuposición: o número de workers, os tempos de servizo, a capacidade da base de datos, o tamaño da caché, a velocidade de recheo, os prezos e a taxa de erros da versión defectuosa son valores ilustrativos para un servizo web de tamaño medio.

Aleatoriedade: un xerador mulberry32 con semente; distribucións usadas — uniforme, exponencial (CDF inversa), normal (Box–Muller), Poisson (Knuth). A semente móstrase e pódese compartir.

Fontes

  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

Quen se dedica a isto

Modelo educativo — non apto para decisións operativas. Os emprazamentos reais calibran cada constante segundo o seu propio equipamento e datos.