Aller au contenu

Backend Spring Boot

Structure du projet

perfshop-app/src/main/java/com/perfshop/
├── chaos/
│   ├── ChaosService.java          # État des anomalies (AtomicInteger)
│   ├── ChaosController.java       # API REST /api/chaos/backend
│   ├── CpuChaosScheduler.java     # Boucle SHA-256 fixedRate=100ms
│   ├── MemoryLeakService.java     # Accumulation objets en mémoire
│   ├── ThreadPoolChaosService.java
│   ├── DbPoolChaosService.java
│   ├── SlowQueryChaosService.java
│   ├── DeadlockChaosService.java
│   └── NetworkDelayChaosService.java
├── controller/
│   ├── ProductController.java
│   ├── CartController.java
│   ├── OrderController.java
│   └── AuthController.java
├── service/
├── repository/
└── model/

API Chaos Backend

Lire l'état actuel

GET /api/chaos/backend/state
{
  "cpu": 0,
  "memory": 0,
  "threadPool": 0,
  "dbPool": 0,
  "slowQuery": 0,
  "deadlock": 0,
  "network": 0
}

Modifier une anomalie

POST /api/chaos/backend/state
Content-Type: application/json

{
  "cpu": 75,
  "memory": 50
}

CpuChaosScheduler — détail technique

@Scheduled(fixedRate = 100)  // toutes les 100ms comme un métronome
public void executeCpuChaos() {
    int intensity = chaosService.getCpuIntensity().get();
    if (intensity == 0) return;

    // 100% slider = 320 000 iterations = ~100% CPU sur i7
    int iterations = intensity * 3_200;

    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    // ... boucle de hashage non optimisable par le JIT
}

Calibrage

La formule intensity × 3200 est calibrée pour un i7-8700T. Sur un serveur plus puissant, 100% slider ≠ 100% CPU container. Ajuster la constante dans CpuChaosScheduler.java si nécessaire.

Métriques Prometheus clés

Métrique Type Anomalie associée
docker_container_cpu_percent{container="perfshop-app"} gauge CPU Burn
jvm_memory_used_bytes{area="heap"} gauge Memory Leak
tomcat_threads_busy_threads gauge Thread Pool
hikaricp_connections_active gauge DB Pool
hikaricp_connections_pending gauge DB Pool
http_server_requests_seconds_bucket histogram Slow Query, Network
jvm_gc_pause_seconds_sum counter Memory Leak
jvm_threads_states_threads{state="blocked"} gauge Deadlock