🖥️ Exploitation TI — fiabilité des sites Modèle en direct
Vous êtes de garde pour un service Web : un équilibreur de charge devant un parc d’instances, un cache devant une base de données et un objectif de disponibilité de 99,9 %. Chaque minute, le modèle calcule le délai de file d’attente, les expirations, les succès de cache et la charge de la base de données à partir de formules de manuel — ainsi que ce que coûtent vos décisions.
Ce que vous allez apprendre
Pourquoi la latence explose près de la pleine utilisation (Erlang C), et pourquoi la mise à l’échelle automatique avec un délai de démarrage arrive toujours en retard.
Comment les SLO, les budgets d’erreurs et les alertes de taux de consommation déterminent quand revenir en arrière.
Comment un cache froid se transforme en panne de base de données, et quels leviers font gagner du temps : délestage, dégradation, préchauffage.
Simulateur
Temps 0 min
▶Instance en service
⚙Instance en démarrage
!Instance sur la mauvaise version
·Emplacement libre
•Requêtes entrantes
Commandes
Plancher du parc. L’augmenter lance des instances immédiatement — elles ont quand même besoin du délai de démarrage avant de servir.
Suivi de cible sur l’utilisation; pas de nouvelle montée en charge tant que des instances démarrent encore. Désactivé = exactement le minimum.
Plus bas = plus de marge et plus de coûts. L’utilisation mesurée ne peut pas dépasser 100 %, donc un parc saturé ne grandit que pas à pas.
TTL plus long = plus de succès, mais les réponses peuvent être plus anciennes (âge moyen ≈ TTL/2).
Charge les clés populaires pendant 6 minutes (+12 % du cache par minute) au prix de 600 requêtes de base de données/s supplémentaires.
Part des 30 % de faible priorité (préchargement, traitement par lots, robots d’indexation) rejetée à l’équilibreur de charge avec « réessayez plus tard ».
La fonctionnalité lourde ajoute 20 ms de CPU et une requête de base de données par requête. Désactivée = dégradation gracieuse.
Redéploie la dernière bonne version sur un nouveau parc (5 min, facturé deux fois), puis bascule le trafic. Appuyer de nouveau relance la préparation; sans mauvaise version en ligne, cela ne fait que coûter de l’argent.
Indicateurs
Taux d’erreur
0,00%
normal
Latence p99
342ms
normal
Budget d’erreurs restant (30 jours)
50,0%
normal
Utilisation du parc
52%
normal
Taux de consommation (1 h)
0,0 ×
Requêtes
1125 req/s
Instances en service
10
Instances en démarrage
0
Taux de succès du cache
77 %
Utilisation de la base de données
19 %
Trafic délesté
0 %
Coût du parc
4,00 $/h
Coût jusqu’ici
0,00 $
Âge moyen des réponses en cache
30 s
Trafic sur la mauvaise version
0 %
Recommandations disponibles
100 %
Tendance
Scénarios de crise
Niveau 1 · Mauvaise mise en production
Une nouvelle version est déployée à 09:10. Le mois a déjà été difficile : il ne reste que 20 % du budget d’erreurs. Quelques minutes après le déploiement, l’alerte de taux de consommation se déclenche. Protégez le budget.
Budget d’erreurs restant à la fin ≥ 18,5 %
Taux d’erreur moyen ≤ 0,65 % après le déploiement
Coût du parc ≤ 9,50 $
Niveau 2 · Afflux soudain de visiteurs
Un lien vers le service se propage vite et un pic de trafic est attendu à un moment de cette matinée — personne ne sait quand ni de quelle ampleur. Le démarrage de nouvelles instances prend 8 minutes aujourd’hui. Quand il arrivera, gardez les erreurs et la latence faibles sans brûler d’argent dans une capacité inutilisée.
Taux d’erreur moyen ≤ 0,2 %
Latence p99 moyenne ≤ 400 ms
Trafic délesté moyen ≤ 5 %
Coût total ≤ 21 $
Recommandations disponibles ≥ 85 % du temps
Niveau 3 · Cache froid
À la pointe de midi, un script de maintenance vide tout le cache. Chaque requête va maintenant à la base de données, dimensionnée pour le taux de succès habituel de 85 %. Remettez le service en état sans surcharger la base de données.
Taux d’erreur moyen ≤ 1,5 %
Utilisation de la base de données jamais au-dessus de 90 % après la première minute
Âge moyen des réponses en cache ≤ 90 s en moyenne
Coût total ≤ 9 $
Recommandations disponibles ≥ 80 % du temps
Trafic délesté moyen ≤ 5 %
Base — le modèle derrière les chiffres
Chaque relation utilisée par le simulateur, avec sa source. Les constantes signalées comme hypothèses sont des calibrations illustratives.
Les requêtes suivent une courbe quotidienne plus des perturbations; le nombre par minute est aléatoire (Poisson, approximation normale) avec un peu de rafales.
λ(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]Hypothèse : le nombre de workers, les temps de service, la capacité de la base de données, la taille du cache, la vitesse de remplissage, les prix et le taux d’erreur de la mauvaise version sont des valeurs illustratives pour un service Web de taille moyenne.
Erlang C : la probabilité qu’une requête doive attendre un worker libre dans un système M/M/N.
N = instances × 16 workers, a = λ·S; C(a, N) = B / (1 − (a/N)(1 − B)), B = Erlang B[3][6]
Queue du temps d’attente : la probabilité d’attendre plus de t décroît de façon exponentielle; les requêtes encore en attente à l’expiration de 2 s échouent. Au-delà de la capacité, l’excédent échoue.
Latence p99 à partir des quantiles du temps de service et du temps d’attente.
p99 ≈ S·ln 100 + ln(C/0.01)/(N/S − λ) (service + waiting quantile, an approximation)[3][6]Approximation : additionner les quantiles de service et d’attente ne donne pas exactement le p99 de leur somme (il peut être un peu trop haut ou trop bas); la file est traitée comme stable à l’intérieur de chaque minute, car les requêtes durent des millisecondes.
Loi de Little : workers occupés = taux d’arrivée × temps de service.
Cache TTL : avec des requêtes aléatoires, chaque échec lance une période TTL pendant laquelle les requêtes sont servies par le cache.
hit = warm × rT/(1 + rT), r = λ / 20,000 objects; mean age of a cached answer ≈ T/2[5]
Les échecs de cache chargent la base de données; son délai de file d’attente ralentit chaque requête qui la sollicite, ce qui remplit aussi les workers de l’application.
DB load = λ·q·(1 − hit); query time = 5 ms/(1 − ρ_db) (≤ 250 ms); S = S_app + (1 − hit)·q·query time[6]Hypothèse : le nombre de workers, les temps de service, la capacité de la base de données, la taille du cache, la vitesse de remplissage, les prix et le taux d’erreur de la mauvaise version sont des valeurs illustratives pour un service Web de taille moyenne.
SLO et budget d’erreurs : le taux de consommation indique combien de fois plus vite que permis le budget est dépensé.
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]
Autoscaler à suivi de cible avec délai de démarrage et période de refroidissement.
desired = ⌈serving × utilization / target⌉ (utilization saturates at 100 %); new instances serve after the boot delay[6]Hypothèse : le nombre de workers, les temps de service, la capacité de la base de données, la taille du cache, la vitesse de remplissage, les prix et le taux d’erreur de la mauvaise version sont des valeurs illustratives pour un service Web de taille moyenne.
Autres constantes d’exploitation utilisées par le modèle.
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 instancesHypothèse : le nombre de workers, les temps de service, la capacité de la base de données, la taille du cache, la vitesse de remplissage, les prix et le taux d’erreur de la mauvaise version sont des valeurs illustratives pour un service Web de taille moyenne.
Aléa : un générateur mulberry32 à graine; lois utilisées — uniforme, exponentielle (fonction de répartition inverse), normale (Box–Muller), de Poisson (Knuth). La graine est affichée et partageable.
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
Modèle éducatif — non destiné aux décisions opérationnelles. Les sites réels calibrent chaque constante selon leur propre équipement et leurs propres données.