Aller au contenu

Chaos Backend

Les 7 anomalies backend dégradent le container perfshop-app (Spring Boot).

1. CPU Burn 🔥

Implémentation : CpuChaosScheduler.java

Boucle SHA-256 exécutée toutes les 100ms sur un thread dédié. Formule : iterations = intensity × 3200

@Scheduled(fixedRate = 100)
public void executeCpuChaos() {
    int iterations = intensity * 3_200; // 100% → 320 000 iter/100ms
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    for (int i = 0; i < iterations; i++) {
        // hashage non optimisable par le JIT
        wasteResult = digest.digest(salted);
    }
}

Métriques impactées : - docker_container_cpu_percent{container="perfshop-app"} → monte proportionnellement - http_server_requests_seconds p99 → augmente si CPU saturé


2. Memory Leak 💾

Implémentation : MemoryLeakService.java

Accumulation d'objets en mémoire jamais libérés, provoquant une montée continue du heap JVM et des cycles GC de plus en plus fréquents.

Métriques impactées : - jvm_memory_used_bytes{area="heap"} → montée continue - jvm_gc_pause_seconds_sum → augmente - jvm_gc_pause_seconds_count → fréquence GC augmente


3. Thread Pool Chaos 🧵

Implémentation : ThreadPoolChaosService.java

Thread.sleep() bloquants sur les threads Tomcat. Les threads restent occupés sans traiter de nouvelles requêtes → saturation progressive.

Métriques impactées : - tomcat_threads_busy_threads → monte vers le max (200) - jvm_threads_states_threads{state="timed-waiting"} → augmente - http_server_requests_seconds → latence explose


4. DB Pool Chaos 🗄️

Implémentation : DbPoolChaosService.java

Acquisition de connexions HikariCP sans les libérer → pool épuisé, les requêtes suivantes attendent en file.

Métriques impactées : - hikaricp_connections_active → monte vers le max (20) - hikaricp_connections_pending → files d'attente - hikaricp_connections_acquire_seconds → temps d'acquisition explose


5. Slow Query 🐌

Implémentation : SlowQueryChaosService.java

Injection de délais dans les requêtes SQL via pg_sleep() ou délai applicatif.

Métriques impactées : - http_server_requests_seconds_bucket{uri="/api/products"} p99 → explose - hikaricp_connections_acquire_seconds → connexions tenues longtemps


6. Deadlock 🔒

Implémentation : DeadlockChaosService.java

Création de locks mutuellement bloquants → threads en état BLOCKED indéfiniment.

Métriques impactées : - jvm_threads_states_threads{state="blocked"} → monte - http_server_requests_seconds_count{status="5xx"} → erreurs 503


7. Network Delay 🌐

Implémentation : NetworkDelayChaosService.java

Délai artificiel ajouté avant chaque réponse HTTP. intensity × 20ms de délai à chaque requête.

Métriques impactées : - http_server_requests_seconds toutes percentiles → augmentent uniformément - Corrélation forte avec p50 (contrairement à Slow Query qui impacte surtout p99)