Introduction au Chaos Engineering¶
PerfShop est une plateforme pédagogique de chaos engineering conçue pour l'enseignement du test de performance, de la qualité logicielle et de la sécurité applicative. Cette section documente exhaustivement les sept familles de chaos que la plateforme injecte dans l'application e-commerce support, les leviers exposés aux formateurs et aux étudiants, ainsi que les métriques associées.
Cette documentation est une référence technique. Pour les scénarios de TP, consultez les supports de formation livrés avec la licence.
Philosophie pédagogique¶
Le principe est simple : injecter délibérément des anomalies réalistes dans un système e-commerce fonctionnel, pour que l'étudiant apprenne à les identifier via les outils d'observabilité (Grafana, Tempo, Loki, Pyroscope) — et non à les corriger dans le code. Chaque chaos est calqué sur un incident réel rencontré en production : index SQL manquants, absence d'idempotence, fuite d'écouteurs React, IDOR dans une API REST, TVA obsolète codée en dur.
La règle d'or est que avec les bonnes données de test, le parcours e-commerce doit toujours pouvoir aboutir, quel que soit le niveau de chaos actif — sauf pour les chaos fonctionnels qui injectent volontairement des exceptions JVM terminales (F1, F2, F3).
Les sept familles de chaos¶
flowchart TB
subgraph ADM[Chaos Admin — pilotage formateur]
AF[Panneau chaos-admin]
end
subgraph CHAOS[Les 7 familles de chaos PerfShop]
P[**1. Performance**<br/>CPU, mémoire, GC, DB pool,<br/>threads, slow query,<br/>deadlock, réseau]
S[**2. Scénarios météo**<br/>20 presets combinant<br/>plusieurs leviers<br/>N1-01 → N4-05]
F[**3. Fonctionnel**<br/>F1 NPE · F2 SOE<br/>F3 OOM · F4 corruption]
B[**4. Métier**<br/>16 anomalies<br/>A1 → A16<br/>TMAP / ISTQB]
SC[**5. Sécurité**<br/>12 failles<br/>S1 → S12<br/>OWASP Top 10]
SK[**6. Scripting**<br/>Tokens HTTP progressifs<br/>Junior → Maestro<br/>corrélation, HMAC]
FR[**7. Frontend**<br/>CPU, mémoire, DOM,<br/>fetch flood,<br/>double fetch]
end
subgraph APP[Application e-commerce]
BE[Backend Spring Boot]
FE[Frontend React]
end
AF --> P & S & F & B & SC & SK & FR
P & F & B & SC & SK --> BE
FR --> FE
S --> BE & FE
Chaque famille est indépendante : on peut activer simultanément le Chaos Métier niveau 3 et le Chaos Performance niveau 2, par exemple. Les Scénarios météo sont des combinaisons pré-calibrées de leviers Performance (backend + frontend) — ils ne touchent pas aux familles Fonctionnel, Métier, Sécurité ou Scripting.
Niveaux unifiés 0 – 4¶
Cinq familles (Fonctionnel, Métier, Sécurité, Scripting, Performance via scénarios) utilisent un système de niveaux unifié, cumulatif, aligné sur la nomenclature PerfShop :
| Niveau | Label | Sémantique |
|---|---|---|
| 0 | Désactivé | Aucune anomalie active — comportement nominal de référence |
| 1 | Junior | Anomalies les plus visibles — diagnostic direct |
| 2 | Confirmé | Anomalies plus subtiles, cumulables avec le niveau 1 |
| 3 | Expert | Diagnostic nécessitant Tempo / Pyroscope / corrélation |
| 4 | Master | Tout est actif — parcours Master / validation métier fine |
Le Chaos Scripting utilise Maestro au lieu de Master au niveau 4 (dérivation dynamique de clé HMAC par session).
Les niveaux sont cumulatifs : le niveau 3 inclut toutes les anomalies
des niveaux 1 et 2. Chaque service chaos expose une Gauge Prometheus
chaos.<famille>.level qui reflète l'état courant.
Sliders et presets¶
Le Chaos Performance (infrastructure) et le Chaos Frontend utilisent des sliders 0 – 100 % qui ne sont pas des pourcentages arbitraires : chaque valeur est calibrée pour correspondre à un impact mesurable. Les formules exactes sont documentées dans Chaos Performance et Chaos Frontend.
Les scénarios météo (N1-01 à N4-05) sont 20 presets qui combinent plusieurs leviers Performance en un seul clic étudiant. Ils sont documentés dans Scénarios météo.
Freemium vs Pro¶
PerfShop est distribué sous licence AGPL-3.0-or-later avec une option de licence commerciale duale. Sans licence active, la plateforme reste fonctionnelle mais restreint l'accès côté étudiant :
| Famille | Sans licence (Freemium) | Avec licence (Pro) |
|---|---|---|
| Performance (CPU) | Niveau ≤ 1 | Niveaux 0 → 4 |
| Scénarios météo | N1-01 et N1-02 uniquement | Les 20 scénarios |
| Scripting | Niveau ≤ 1 | Niveaux 0 → 4 |
| Métier | Bloqué | Niveaux 0 → 4 |
| Fonctionnel | Bloqué | Niveaux 0 → 4 |
| Sécurité | Bloqué | Niveaux 0 → 4 |
| Pédagogique BAC1-BAC5 | Bloqué | Niveaux 0 → 5 |
Les restrictions freemium sont appliquées côté backend dans
ChaosStudentController : toute tentative de dépassement retourne un HTTP
402 Payment Required avec le code d'erreur LICENSE_REQUIRED. Côté
formateur (chaos-admin), tous les niveaux sont toujours accessibles
indépendamment de la licence — la licence ne concerne que la surface
étudiant.
Les deux scénarios freemium (N1-01 Brise légère et N1-02 Brume matinale)
sont construits avec le flag .free() dans PerformanceScenario.java.
Ils activent respectivement le CPU backend à 40 % et la fuite mémoire
frontend à 30 %.
Architecture logicielle¶
flowchart LR
subgraph FRONT[Navigateur]
R[React App]
CA[chaos-agent.js]
end
subgraph BACK[Backend Spring Boot]
CI[ChaosInterceptor]
CS[ChaosService]
MLS[MemoryLeakSimulator]
GPS[GcPressureSimulator]
CCS[CpuChaosScheduler]
DPS[DbPoolChaosScheduler]
BCS[BusinessChaosService]
FCS[FunctionalChaosService]
SCS[SecurityChaosService]
SKS[ChaosScriptingService]
FCC[FrontendChaosController]
end
subgraph OBS[Observabilité]
PROM[Prometheus]
GRAF[Grafana]
TEMPO[Tempo]
LOKI[Loki]
end
R --> CI
CA -->|poll 5s| FCC
CI --> CS
CS --> MLS & GPS & CCS & DPS
CI -.metrics.-> PROM
CS & MLS & GPS & BCS & FCS & SCS & SKS -.gauges.-> PROM
BCS & FCS & SCS -.logs.-> LOKI
CI -.spans.-> TEMPO
PROM --> GRAF
Les services backend exposent leur état courant via des Gauges
Micrometer (préfixe chaos.) scrapées par Prometheus toutes les 15 secondes.
Les anomalies Métier, Fonctionnelles et Sécurité écrivent en plus dans un
activity log circulaire (200 entrées max) consultable via les endpoints
publics /api/chaos/public/<famille>/logs pour alimenter les dashboards
temps réel.
Le Chaos Frontend est piloté par un polling simple : le composant
chaos-agent.js interroge GET /api/chaos/frontend/state toutes les 5
secondes et applique les intensités 0 – 100 reçues aux cinq anomalies
côté navigateur.
Endpoints exclus du chaos¶
Quel que soit le niveau de chaos actif, certains endpoints ne sont
jamais impactés par ChaosInterceptor afin de garantir que le
monitoring et le pilotage restent opérationnels, y compris quand le
backend est saturé à 100 % :
/actuator/**— scraping Prometheus, health checks, heap dump/api/admin/chaos/**— pilotage du chaos par le formateur/api/chaos/**— endpoints publics monitoring, page étudiant, état frontend/api/license/**— activation et statut de licence
Cette garantie est inconditionnelle : elle est implémentée en tête de
ChaosInterceptor.preHandle() par un early-return avant toute injection
d'anomalie.
Pour aller plus loin¶
- Chaos Performance — infrastructure backend calibrée
- Scénarios météo — les 20 presets N1 à N4
- Chaos Fonctionnel — exceptions JVM injectées (F1 – F4)
- Chaos Métier — anomalies fonctionnelles (A1 – A16)
- Chaos Sécurité — failles OWASP (S1 – S12)
- Chaos Scripting — corrélation HTTP et HMAC
- Chaos Frontend — dégradation navigateur
- Référence des métriques — catalogue Prometheus exhaustif