17 points par GN⁺ 2025-05-23 | 1 commentaires | Partager sur WhatsApp
  • Dans les environnements microservices et cloud, les pannes sont inévitables ; il faut donc renforcer à l’avance la résilience du système grâce au Chaos Engineering
  • Chaos Toolkit et Chaos Monkey sont des outils puissants de test de défaillance, respectivement adaptés à un usage généraliste et à un environnement spécialisé Java (Spring Boot)
  • Les expériences basées sur Kubernetes et Istio permettent de simuler divers scénarios de panne réalistes, comme la latence réseau, l’interruption de service ou encore une panne de région
  • En intégrant le Chaos Engineering dans le pipeline CI/CD, il devient possible de vérifier automatiquement la capacité de réaction aux pannes avant la production
  • L’essentiel n’est pas la « destruction », mais la « construction de la confiance » ; il est recommandé de commencer petit et d’augmenter progressivement le niveau de chaos

Chaos Engineering pour les microservices

Qu’est-ce que le Chaos Engineering ?

  • Le Chaos Engineering est une méthodologie qui simule des pannes réelles afin d’identifier à l’avance les faiblesses du système et de les corriger
  • Exemples principaux de simulations :
    • panne de région ou de centre de données
    • latence réseau entre services
    • surcharge CPU et panne d’I/O
    • indisponibilité d’un service dépendant
    • erreurs du système de fichiers
  • Objectif : réduire le temps de récupération, améliorer la disponibilité et minimiser l’impact sur les utilisateurs avant qu’une panne ne survienne

Cycle de vie d’une expérience de Chaos Engineering

  • Application d’un processus cyclique structuré planification → exécution → observation → amélioration grâce à une procédure expérimentale organisée
  • Exploitation continue fondée sur l’expérimentation pour améliorer systématiquement la fiabilité

Chaos Toolkit vs. Chaos Monkey

  • Cas d’usage

    • Chaos Toolkit : framework d’expérimentation chaos généraliste utilisable sur diverses plateformes et dans différents environnements
    • Chaos Monkey (réservé à Spring Boot) : outil de simulation de défaillance dédié aux applications Java Spring Boot
  • Mode de configuration

    • Chaos Toolkit : définition des expériences via une configuration déclarative basée sur JSON/YAML
    • Chaos Monkey : configuration via le fichier application.yml et intégration avec Spring Boot Actuator
  • Langages et environnements pris en charge

    • Chaos Toolkit : prise en charge des environnements multi-langages et multi-plateformes (Node.js, Java, Kubernetes, etc.)
    • Chaos Monkey : spécialisé pour les applications basées sur Java (Spring Boot)
  • Types de pannes pris en charge

    • Chaos Toolkit : prise en charge d’un large éventail d’expériences de panne, dont pannes réseau, arrêt de Pod, stress CPU/mémoire et échecs personnalisés
    • Chaos Monkey : injection de pannes centrée sur la couche applicative, comme latence (Latency), exceptions (Exceptions) et interruption de service (KillApp)
  • Systèmes intégrables

    • Chaos Toolkit : intégration possible avec Kubernetes, Istio, Azure, Prometheus, etc.
    • Chaos Monkey : intégration directe avec l’API Spring Boot Actuator pour cibler les composants internes de Spring

Contextes d’utilisation recommandés

  • Chaos Toolkit
    • environnement de déploiement basé sur Kubernetes
    • services multi-cloud ou multi-langages
    • construction de scénarios de panne complexes
  • Chaos Monkey
    • applications Spring Boot basées sur Java
    • tests d’exceptions ou de latence au niveau méthode
    • préférence pour une approche simple et intégrée

Exemples pratiques avec Chaos Toolkit (Java/Node.js/Kubernetes)

Expériences en environnement Kubernetes

  • Expérience d’arrêt de Pod : validation de la résilience avec pod-kill
  • Expérience de latence de région : injection de latence réseau dans un service virtuel Istio
  • Expérience d’épuisement des ressources : consommation forcée de CPU/mémoire
  • Simulation d’interruption de base de données : test de réaction à la panne d’un service dépendant
  • Partitionnement réseau : expérience de coupure de communication entre services
  • Panne basée sur le temps : injection de panne pendant les pics de trafic

Injection de latence basée sur Istio

  • Injection de latence réseau au niveau de la couche service mesh
  • Contrôle de la latence et du taux d’erreur via la configuration Istio

Génération et analyse de rapports

  • Résumé des résultats de l’expérience avec la commande chaos report
  • Interprétation des résultats :
    • état normal maintenu → résilience assurée
    • anomalie détectée → analyse des logs et de la supervision nécessaire
    • pannes en cascade → envisager l’introduction d’un circuit breaker et du refactoring

Chaos Monkey dans Spring Boot

  • Cibles surveillées : @Controller, @Service, @Repository, @RestController
  • Pannes injectables :
    • Latency Assault : latence artificielle
    • Exception Assault : génération d’exception
    • KillApp Assault : arrêt complet de l’application

Mode d’exécution

  • Activation du profil chaos-monkey dans application.yml
  • Contrôle dynamique via l’API Spring Boot Actuator

Chaos Engineering en Node.js

Utilisation de Chaos Monkey pour Node.js

  • Installation d’une bibliothèque Chaos Monkey tierce
  • Fonctionnalités :
    • injection de latence
    • génération d’exceptions
    • simulation de pannes réseau

Exemple d’utilisation de Chaos Toolkit

  • Configuration de l’expérience au format JSON
  • Exemple : injection de 200 ms de latence dans une API Node.js donnée

Intégration du chaos dans le pipeline CI/CD

Objectifs de l’intégration

  • validation automatique de la résilience avant déploiement
  • identification des goulots d’étranglement de performance
  • amélioration du MTTR (Mean Time to Recovery)
  • automatisation du rollback sans intervention manuelle

Exemple d’intégration avec GitHub Actions

  • Exécution automatique des expériences lors d’un commit de code
  • Exécution de l’expérience après installation de Chaos Toolkit
  • arrêt du déploiement en cas d’échec du health check

Bonnes pratiques pour les expériences de Chaos Engineering

  • 1. Établir une hypothèse d’état normal : définir clairement les critères d’un fonctionnement normal du système
  • 2. Commencer par des expériences de faible intensité : 100 ms de latence → augmentation progressive
  • 3. Intégrer la supervision de façon indispensable : observation en temps réel avec Prometheus, Grafana, etc.
  • 4. Configurer un rollback automatique : mettre en place un dispositif de récupération rapide en cas d’échec
  • 5. Étendre progressivement le périmètre : du niveau service au niveau cluster

Conclusion

  • Le Chaos Engineering est une stratégie visant non pas à casser le système, mais à construire la confiance
  • Que ce soit en Java, Node.js, Kubernetes ou Istio, il est possible de commencer par de petites expériences puis d’étendre progressivement
  • Des outils comme Chaos Toolkit ou Chaos Monkey permettent de simuler en toute sécurité des situations de panne réelles
  • En intégrant et automatisant les expériences dans le CI/CD, on peut sécuriser à l’avance un fonctionnement stable

Références

1 commentaires

 
aer0700 2025-05-24

Quand j’ai entendu le terme « chaos engineering », je me suis dit sur le moment qu’on parlait du backend de notre boîte que j’avais codé ;