Einführung in den Chaos Affen

Einführung in Chaos Monkey

1. Einführung

In diesem Tutorial werden wir überChaos Monkey für Spring Boot sprechen.

Dieses Tool hilft uns beiintroduce some of the principles of chaos engineering into our Spring Boot web applications, indem es unseren REST-Endpunkten Latenz hinzufügt, Fehler auslöst oder sogar eine App beendet.

2. Konfiguration

Um Chaos Monkey zu unserer Anwendung hinzuzufügen, benötigen wir ein einzelnesMaven dependency in unserem Projekt:


    de.codecentric
    chaos-monkey-spring-boot
    2.0.0

3. Aufbau

Sobald wir die Abhängigkeit in unserem Projekt eingerichtet haben, müssen wir unser Chaos konfigurieren und starten.

Wir können dies auf verschiedene Arten tun:

  • Verwenden Sie beim Start der Anwendung daschaos-monkey -Spring-Profil (empfohlen).

  • Verwenden vonchaos.monkey.enabled=true property

Durch Starten der Anwendung mitchaos-monkey Federprofilwe don’t have to stop and start the application if we want to enable or disable it, während unsere App ausgeführt wird:

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

Eine weitere nützliche Eigenschaft istmanagement.endpoint.chaosmonkey.enabled. . Wenn Sie diese Eigenschaft auf true setzen, wird der Verwaltungsendpunkt für unseren Chaos Monkey aktiviert:

http://localhost:8080/chaosmonkey

Von diesem Endpunkt aus können wir den Status unserer Bibliothek sehen. Hier finden Sie die vollständigenlist of endpoints und ihre Beschreibung, mit deren Hilfe Sie die Konfiguration ändern, Chaos Monkey und andere detailliertere Steuerelemente aktivieren oder deaktivieren können.

Mit allen verfügbarenproperties können wir eine genauere Kontrolle darüber haben, was in unserem erzeugten Chaos passiert.

4. Wie funktioniert es

Chaos Monkey besteht aus Watchers and Assaults. Ein Watcher ist eine Spring Boot-Komponente. Es verwendetSpring AOP, um zu sehen, wann eine öffentliche Methode in Klassen ausgeführt wird, die mit den folgenden Spring-Annotationen versehen sind:

  • Komponente

  • Regler

  • RestController

  • Bedienung

  • Repository

Basierend auf der Konfiguration in unserer App-Eigenschaftendateiour public methods will be either assaulted or not durch eine der folgenden Optionen:

  • Latenz-Angriff - Fügt der Anfrage eine zufällige Latenz hinzu

  • Exception Assault - Löst eine zufällige Laufzeitausnahme aus

  • AppKiller Assault - ähm, die App stirbt

Schauen wir uns an, wie wir unseren Beobachter und unsere Angriffe für einen kontrollierten Angriff konfigurieren können.

5. Wächter

Standardmäßig ist Watcher nur für unsereservices aktiviert. Dies bedeutet, dass unsere Angriffe nur für öffentliche Methoden in unseren Klassen ausgeführt werden, die mit@Service. versehen sind

Das können wir aber leicht ändern, indem wir Eigenschaften konfigurieren:

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

Beachten Sie, dass nach dem Start der Anwendungwe cannot dynamically change the watcher using the Chaos Monkey for Spring Boot management port, über die wir zuvor gesprochen haben.

6. Angriffe

Angriffe sind im Grunde genommen Szenarien, die wir in unserer Anwendung testen möchten. Nehmen wir jede Art von Angriff und sehen, was sie bewirkt und wie wir sie konfigurieren können.

6.1. Latenz-Angriff

Diese Art von Angriff erhöht die Latenz unserer Anrufe. This way our application responds slower and we can monitor how it behaves when for example the database responds slower.

Über die Eigenschaftendatei unserer App können wir Angriffe dieser Art konfigurieren und aktivieren:

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

Eine andere Möglichkeit, diese Art von Angriff zu konfigurieren und ein- und auszuschalten, ist der Management-Endpunkt von Chaos Monkey.

Aktivieren Sie den Latenzangriff und fügen Sie einen Latenzbereich zwischen zwei und fünf Sekunden hinzu:

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. Ausnahmeangriff

Hier wird getestet, wie gut unsere Anwendung mit Ausnahmen umgehen kann. Based on configuration it will throw a random Runtime Exception einmal aktiviert.

Wir können es mithilfe eines Curl-Aufrufs aktivieren, der unserem Latenz-Angriff ähnelt:

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

6.3. AppKiller Assault

In diesem Fall stirbt unsere App an einem zufälligen Punkt. Wir können es mit einem einfachen Curl-Aufruf wie den beiden vorherigen Arten von Angriffen aktivieren oder deaktivieren:

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

7. Fazit

In diesem Artikel werdenwe talked about Chaos Monkey for Spring Boot. Wir haben gesehen, dass einige der Prinzipien vonchaos engineering übernommen werden und wir sie auf die Anwendung vonSpring Bootanwenden können.

Wie immer finden Sie den vollständigen Code der Beispiele inover on Github.