Aller au contenu

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