🖥️ 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
Per què la latència explota prop de la plena utilització (Erlang C), i per què l'escalat automàtic amb retard d'arrencada sempre arriba tard.
Com els SLO, els pressupostos d'errors i les alertes de taxa de consum decideixen quan revertir.
Com una memòria cau freda es converteix en una caiguda de la base de dades, i quines palanques guanyen temps: descartar, degradar, escalfar.
Simulador
Temps 0 min
▶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 ×
Peticions
1125 req/s
Instàncies servint
10
Instàncies arrencant
0
Taxa d'encerts de la memòria cau
77 %
Utilització de la base de dades
19 %
Trànsit descartat
0 %
Cost de la flota
4,00 $/h
Cost fins ara
0,00 $
Edat mitjana de les respostes en memòria cau
30 s
Trànsit a la compilació dolenta
0 %
Recomanacions disponibles
100 %
Tendència
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.
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.
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.
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