Introduction au singe du chaos
1. introduction
Dans ce tutoriel, nous allons parler deChaos Monkey pour Spring Boot.
Cet outil nous aideintroduce some of the principles of chaos engineering into our Spring Boot web applications en ajoutant de la latence à nos points de terminaison REST, en lançant des erreurs ou même en tuant une application.
2. Installer
Pour ajouter Chaos Monkey à notre application, nous avons besoin d'un seulMaven dependency dans notre projet:
de.codecentric
chaos-monkey-spring-boot
2.0.0
3. Configuration
Une fois que nous avons configuré la dépendance 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, à l'aide du profil sspringchaos-monkey (recommandé)
-
Utilisation de la spropertychaos.monkey.enabled=true
En démarrant l'application avec le profil de ressortchaos-monkeywe don’t have to stop and start the application if we want to enable or disable it 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 estmanagement.endpoint.chaosmonkey.enabled. La définition de cette propriété sur true activera le point de terminaison de gestion pour notre Chaos Monkey:
http://localhost:8080/chaosmonkey
À partir de ce point de terminaison, nous pouvons voir l'état de notre bibliothèque. Voici leslist of endpoints complets et leur description qui aideront à modifier la configuration, activer ou désactiver Chaos Monkey et d'autres contrôles plus granulaires.
En utilisant tous lesproperties disponibles, nous pouvons avoir un contrôle plus fin sur ce qui se passe dans notre chaos généré.
4. Comment ça marche
Le singe du chaos comprend des observateurs et des assauts. Un observateur est un composant de démarrage printanier. Il utiliseSpring 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
Basé sur la configuration dans notre fichier de propriétés d'application,our public methods will be either assaulted or not, 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 nosservices. 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,we cannot dynamically change the watcher using the Chaos Monkey for Spring Boot management port dont nous avons parlé plus tôt.
6. Les 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. This way our application responds slower and we can monitor how it behaves when for example the database responds slower.
Nous pouvons configurer et activer 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
Un autre moyen 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 comprise entre deux et cinq secondes:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyRangeStart": 2000,
"latencyRangeEnd": 5000,
"latencyActive": true,
"exceptionsActive": false,
"killApplicationActive": false
}'
6.2. Exception Assault
Cela teste la capacité de notre application à gérer les exceptions. Based on configuration it will throw a random Runtime Exception une fois activé.
Nous pouvons l'activer en utilisant un appel curl similaire à notre assaut de latence:
curl -X POST http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": true,
"killApplicationActive": false
}'
6.3. AssKiller Assault
Celui-ci, notre application va mourir à 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 http://localhost:8080/chaosmonkey/assaults \
-H 'Content-Type: application/json' \
-d \
'
{
"latencyActive": false,
"exceptionsActive": false,
"killApplicationActive": true
}'
7. Conclusion
Dans cet article,we talked about Chaos Monkey for Spring Boot. Nous avons vu qu'il reprend certains des principes dechaos engineering et nous permet de les appliquer à une applicationSpring Boot.
Comme toujours, le code complet des exemples peut être trouvéover on Github.