Introduction au singe du chaos

1. Introduction

Dans ce tutoriel, nous allons parler de Chaos Monkey pour Spring Boot.

Cet outil nous aide à introduire certains des principes de l'ingénierie du chaos dans nos applications Web Spring Boot en ajoutant une latence à nos points de terminaison REST, en lançant des erreurs ou même en supprimant une application.

2. Configuration

Pour ajouter Chaos Monkey à notre application, nous avons besoin d'une seule dépendance Maven dans notre projet:

 de.codecentric chaos-monkey-spring-boot 2.0.0 

3. Configuration

Une fois que nous avons la configuration des dépendances dans notre projet, nous devons configurer et démarrer notre chaos.

Nous pouvons le faire de plusieurs manières:

  • Au démarrage de l'application, en utilisant le profil de ressort chaos-monkey (recommandé)
  • Utilisation de la propriété chaos.monkey.enabled = true

En démarrant l'application avec le profil de ressort chaos-monkey, nous n'avons pas besoin d'arrêter et de démarrer l'application si nous voulons l'activer ou la désactiver pendant que notre application est en cours d'exécution:

java -jar your-app.jar --spring.profiles.active=chaos-monkey

Une autre propriété utile est management.endpoint.chaosmonkey.enabled. La définition de cette propriété sur true activera le point de terminaison de gestion pour notre Chaos Monkey:

//localhost:8080/chaosmonkey

À partir de ce point de terminaison, nous pouvons voir l'état de notre bibliothèque. Voici la liste complète des points de terminaison et leur description qui vous aideront à modifier la configuration, activer ou désactiver Chaos Monkey et d'autres contrôles plus granulaires.

En utilisant toutes les propriétés disponibles, nous pouvons avoir un contrôle plus fin sur ce qui se passe dans notre chaos généré.

4. Comment ça marche

Chaos Monkey se compose d'observateurs et d'assauts. Un Watcher est un composant Spring Boot. Il utilise Spring AOP pour voir quand une méthode publique est exécutée dans des classes annotées avec les annotations Spring suivantes:

  • Composant
  • Manette
  • RestController
  • Un service
  • Dépôt

En fonction de la configuration de notre fichier de propriétés d'application, nos méthodes publiques seront attaquées ou non , par l'un des éléments suivants:

  • Latency Assault - ajoute une latence aléatoire à la demande
  • Exception Assault - lance une exception d'exécution aléatoire
  • AppKiller Assault - Euh, l'application meurt

Voyons comment nous pouvons configurer notre observateur et nos assauts pour un assaut plus contrôlé.

5. Observateur

Par défaut, Watcher n'est activé que pour nos services . Cela signifie que nos assauts ne seront exécutés que pour les méthodes publiques de nos classes annotées avec @Service.

Mais nous pouvons facilement changer cela en configurant les propriétés:

chaos.monkey.watcher.controller=false chaos.monkey.watcher.restController=false chaos.monkey.watcher.service=true chaos.monkey.watcher.repository=false chaos.monkey.watcher.component=false

Gardez à l'esprit qu'une fois l'application démarrée, nous ne pouvons pas changer dynamiquement l'observateur en utilisant le port de gestion Chaos Monkey pour Spring Boot dont nous avons parlé plus tôt.

6. Agressions

Les agressions sont essentiellement des scénarios que nous voulons tester dans notre application. Prenons chaque type d'attaque et voyons ce qu'il fait et comment nous pouvons le configurer.

6.1. Assaut de latence

Ce type d'attaque ajoute de la latence à nos appels. De cette façon, notre application répond plus lentement et nous pouvons surveiller son comportement lorsque, par exemple, la base de données répond plus lentement.

Nous pouvons configurer et activer ou de ce type d'attaque à l'aide du fichier de propriétés de notre application:

chaos.monkey.assaults.latencyActive=true chaos.monkey.assaults.latencyRangeStart=3000 chaos.monkey.assaults.latencyRangeEnd=15000

Une autre façon de configurer et d'activer et de désactiver ce type d'attaque consiste à utiliser le point de terminaison de gestion de Chaos Monkey.

Allumons l'attaque de latence et ajoutons une plage de latence entre deux et cinq secondes:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyRangeStart": 2000, "latencyRangeEnd": 5000, "latencyActive": true, "exceptionsActive": false, "killApplicationActive": false }'

6.2. Assaut d'exception

Cela teste la capacité de notre application à gérer les exceptions. Basé sur la configuration, il lancera une exception d'exécution aléatoire une fois activé.

Nous pouvons l'activer en utilisant un appel curl similaire à notre assaut de latence:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyActive": false, "exceptionsActive": true, "killApplicationActive": false }'

6.3. Assaut AppKiller

Celui-ci, eh bien, notre application mourra à un moment donné. Nous pouvons l'activer ou le désactiver avec un simple appel curl comme les deux types d'assaut précédents:

curl -X POST //localhost:8080/chaosmonkey/assaults \ -H 'Content-Type: application/json' \ -d \ ' { "latencyActive": false, "exceptionsActive": false, "killApplicationActive": true }'

7. Conclusion

Dans cet article, nous avons parlé de Chaos Monkey pour Spring Boot . Nous avons vu que cela reprend certains des principes de l'ingénierie du chaos et nous permet de les appliquer à une application Spring Boot.

Comme toujours, le code complet des exemples peut être trouvé sur Github.