Einführung in Chaos Monkey

1. Einleitung

In diesem Tutorial werden wir über Chaos Monkey for Spring Boot sprechen.

Mit diesem Tool können wir einige der Prinzipien des Chaos Engineering in unsere Spring Boot-Webanwendungen einführen, indem wir unseren REST-Endpunkten Latenz hinzufügen, Fehler auslösen oder sogar eine App beenden.

2. Setup

Um Chaos Monkey zu unserer Anwendung hinzuzufügen, benötigen wir eine einzelne Maven-Abhängigkeit in unserem Projekt:

 de.codecentric chaos-monkey-spring-boot 2.0.0 

3. Konfiguration

Sobald wir das Abhängigkeits-Setup in unserem Projekt haben, müssen wir unser Chaos konfigurieren und starten.

Wir können dies auf verschiedene Arten tun:

  • Verwenden Sie beim Start der Anwendung das Chaos-Monkey- Federprofil (empfohlen).
  • Verwenden von chaos.monkey.enabled = true- Eigenschaft

Durch Starten der Anwendung mit dem Chaos-Monkey- Federprofil müssen wir die Anwendung nicht stoppen und starten, wenn wir sie aktivieren oder deaktivieren möchten, während unsere App ausgeführt wird:

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

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

//localhost:8080/chaosmonkey

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

Mit allen verfügbaren Eigenschaften können wir genauer steuern, was in unserem generierten Chaos passiert.

4. Wie funktioniert es?

Chaos Monkey besteht aus Beobachtern und Angriffen. Ein Watcher ist eine Spring Boot-Komponente. Mithilfe von Spring AOP wird angezeigt, 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-Eigenschaftendatei werden unsere öffentlichen Methoden entweder angegriffen oder nicht :

  • Latenz-Angriff - Fügt der Anforderung eine zufällige Latenz hinzu
  • Exception Assault - löst eine zufällige Laufzeitausnahme aus
  • AppKiller Assault - ähm, die App stirbt

Lassen Sie uns einen Blick darauf werfen, wie wir unseren Beobachter und unsere Angriffe für einen kontrollierten Angriff konfigurieren können.

5. Beobachter

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

Aber wir können das 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 wir den Watcher nach dem Start der Anwendung nicht dynamisch ändern können, indem wir den zuvor erwähnten Chaos Monkey for Spring Boot-Verwaltungsport verwenden .

6. Angriffe

Angriffe sind im Grunde 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. Latenzangriff

Diese Art von Angriff erhöht die Latenz unserer Anrufe. Auf diese Weise reagiert unsere Anwendung langsamer und wir können überwachen, wie sie sich verhält, wenn beispielsweise die Datenbank langsamer reagiert.

Wir können diese Art von Angriff mithilfe der Eigenschaftendatei unserer App 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 Verwaltungsendpunkt von Chaos Monkey.

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

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

Dies testet, wie gut unsere Anwendung mit Ausnahmen umgehen kann. Abhängig von der Konfiguration wird nach der Aktivierung eine zufällige Laufzeitausnahme ausgelöst .

Wir können es mit einem Curl-Aufruf aktivieren, der unserem Latenzangriff ähnelt:

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

6.3. AppKiller-Angriff

In diesem Fall wird unsere App irgendwann sterben. Wir können es mit einem einfachen Curl-Aufruf wie den beiden vorherigen Angriffsarten aktivieren oder deaktivieren:

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

7. Fazit

In diesem Artikel haben wir über Chaos Monkey for Spring Boot gesprochen . Wir haben gesehen, dass es einige der Prinzipien des Chaos Engineering erfordert und es uns ermöglicht, sie auf eine Spring Boot-Anwendung anzuwenden.

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