Nur ein Genie beherrscht das Chaos?

Chaos Monkey for Spring Boot – Anwendungen auf Stabilität prüfen

Marcel Richters
Chaos Monkey for Spring Boot

© Shutterstock.com / fontoknak

Alle Codezeilen sind geschrieben, die Anwendung läuft rund. Aber was, wenn sich doch mal eine Exception einschleicht? Oder unerwartete Latenzen? Chaos Monkey for Spring Boot hilft Entwicklern dabei herauszufinden, was dann passiert. Mit der Bibliothek lassen sich Fehler simulieren, um so Anwendungen einem Stresstest zu unterziehen.

Manchmal braucht es das Chaos, um die Ordnung zu erkennen. Nach diesem Prinzip geht das von Netflix entwickelte Chaos Engineering vor:
„Chaos Engineering is the discipline of experimenting on a distributed system in order to build confidence in the system’s capability to withstand turbulent conditions in production.“ – principlesofchaos.org

Auf Deutsch heißt das so viel wie das absichtliche Schaffen von Chaos in einem System, um dieses System auf seine Widerstandsfähigkeit bei Turbulenzen hin zu überprüfen. Was passiert, wenn Exceptions auftreten? Wenn Latenzen im Netzwerk auftreten? Wenn einer der Services zusammenbricht? Damit diese Fragen nicht von genervten Kunden beantwortet werden müssen, gibt es Chaos Monkey.

Machen Sie sich nicht zum Affen

Chaos Monkey dient dazu, Systemfehler zu simulieren, bevor sie geschehen. Ausdrücklich empfehlen die Entwickler, nur Services zu überprüfen, die auch Fehler aushalten. Außerdem sollten Entwickler, die ein Chaos-Experiment durchführen, kommunikativ und gut im Socializing sein. Denn wenn Chaos Engineering in einem Unternehmen eingeführt wird, bedeutet das schnell, mit allen möglichen anderen Leuten in Kontakt zu kommen, sobald ein Experiment durchgeführt wird. Denn: Es geht nicht nur um das System, sondern auch um die Reaktionen der Menschen hinter dem System.

Vor dem Start eines Chaos-Experiments sollten Parameter festgelegt werden, die implizieren, dass alles „nach Plan“ läuft. Denn Chaos Monkey soll ja dafür sorgen, dass genau das nicht mehr der Fall ist. Wenn möglich sollten Experimente also nicht in der Produktion erfolgen, sondern beispielsweise vor dem Launch, nach Abschluss der Produktion.

Was macht Chaos Monkey?

So lange er nichts tun soll, macht der Chaos Monkey auch erst einmal gar nichts. Chaos Monkey ist eine kleine Bibliothek, die als Dependency in existierende Applikationen eingebunden werden kann. Erst wenn chaos-monkey als Profil für die Applikation aufgerufen wird, wird die Bibliothek aktiv. Um zu starten, muss Spring Boot Chaos Monkey im Verzeichnis der App hinterlegt sein. Wenn die Abhängigkeit dann gestartet wird, werden alle Klassen mit den folgenden Annotations gescannt:

  • @Controller
  • @RestController
  • @Service
  • @Repository

Es lässt sich vor dem Start auswählen, welche Angriffe aktiviert werden und welcher Watcher bei der Beobachtung hilft. Standardmäßig sind nur der @Service-Watcher und der Latenzangriff aktiv.

Test einer Spring-Boot-Anwendung mit Chaos Monkey – ein Beispiel

Nehmen wir eine reine Spring-Boot-Anwendung. Ein Service ist mit @Service annotiert, dazu gibt es einige weitere Komponenten. Der Service soll testweise attackiert werden. Zur Aktivierung von Chaos Monkey braucht es jetzt lediglich zwei Schritte:

1. Chaos Monkey für Spring Boot in die Dependencys aufnehmen

<dependency>
    <groupId>de.codecentric</groupId>
   <artifactId>chaos-monkey-spring-boot</artifactId>
    <version>1.0.1</version>
</dependency>

2. Start der Anwendung mit dem Profil chaos-monkey

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

Jetzt beginnt Chaos Monkey mit seinem Angriff auf alle @Service-Klassen und fügt zufällige Latenzen zu allen public-Methoden hinzu.

Umfassend anpassbar

Angriffe lassen sich auf alle oben erwähnten Annotations anwenden, für diese sind auch die entsprechenden Watcher verfügbar. Es gibt folgende Möglichkeiten für einen Angriff: Latenzangriff, Exception-Angriff und App-Killer-Angriff. Deren Verhaltensweisen lässt sich anpassen. Wie genau, ist in folgender Tabelle zusammengefasst:

Property Beschreibung Wert Voreinstellung
chaos.monkey.assaults.level Wie viele Requests angegriffen werden. 1 steht für jede, 5 für jeden fünften Request 1-10 5
chaos.monkey.assaults.latencyRangeStart Minimum der zu Requests hinzugefügten Latenz in Millisekunden Integer.MIN_VALUE, Integer.MAX_VALUE 3000
chaos.monkey.assaults.latencyRangeEnd Maximum der zu Requests hinzugefügten Latenz in Millisekunden Integer.MIN_VALUE, Integer.MAX_VALUE 15000
chaos.monkey.assaults.latencyActive Latenzangriff aktiv TRUE oder FALSE TRUE
chaos.monkey.assaults.exceptionsActive Exception-Angriff aktiv TRUE oder FALSE FALSE
chaos.monkey.assaults.killApplicationActive App-Killer-Angriff aktiv TRUE oder FALSE FALSE
chaos.monkey.watcher.controller Controller Watcher aktiv TRUE oder FALSE FALSE
chaos.monkey.watcher.restController Rest Controller Watcher aktiv TRUE oder FALSE FALSE
chaos.monkey.watcher.service Service Watcher aktiv TRUE oder FALSE TRUE
chaos.monkey.watcher.repository Repository Watcher aktiv TRUE oder FALSE FALSE

Wer jetzt sein System oder seine Anwendung auf Herz und Nieren testen (oder einfach mal ein wenig Chaos stiften) will, findet Chaos Monkey for Spring Boot auf GitHub. Zur vorbereitenden Vertiefung bietet sich ein Einblick in die Prinzipien des Chaos Engineering im Allgemeinen an.

Geschrieben von
Marcel Richters
Marcel Richters
Marcel hat Soziologie an der Goethe-Universität in Frankfurt am Main studiert und danach als E-Commerce-Manager gearbeitet. Seit Februar 2018 unterstützt er das Team von JAXenter als Redakteur. Daneben arbeitet er als freier Journalist in der Mainmetropole.
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: