Chaos Engineering

Geschrieben von Johannes Born

09.01.2023

Voraussichtliche Lesedauer: 11 Minuten

Hast du schon einmal vom Chaos Monkey gehört? Vor etwa zehn Jahren wurde von Beratern in deutschen Unternehmen folgende Geschichte erzählt: Netflix will eine ultraresiliente Plattform aufbauen. Sie sind sich so sicher, dass die Plattform resilient ist. Deshalb lassen sie in der Produktion einen Chaos Monkey wahlfrei Chaos stiften. Von Latenzen zwischen den Komponenten, automatisiertem abschießen oder absichtlichem überlasten der Services war die Rede. Befeuert wurde dies durch den Artikel “The Netflix Simian Army”. Netflix nennt es Chaos Engineering. Typisch für die Beratungsbranche wurde dieses Vorgehen sofort als die einzige Methode dargestellt, wie man heutzutage Infrastrukturen betreibt.

Die „So geht IT-Operations in Produktteams heute“-Serie

Die Blogserie „So geht IT Operations in Produktteams heute“ ist in folgende Teile gegliedert:

  • Im ersten Teil schauen wir uns an, wie der Reliabiltiy Stack aufgebaut ist und wie die einzelnen Komponenten, SLI, SLO und Error Budget, ineinandergreifen.
  • Im zweiten Teil schauen wir uns an, wie du SLOs einführen kannst und welche Fehler du vermeiden solltest.
  • In diesem Teil werden wir uns mit dem Thema Chaos Engineering beschäftigen. Wir schauen uns an, wie das Vorgehen beim Chaos Engineering dir dabei hilft, dein Produkt optimal an die Nutzerbedürfnisse anzupassen. Damit schlägst du gleich zwei Fliegen mit einer Klappe: Der Operations-Anteil deines Teams wird reduziert, die Betriebsstabilität nimmt zu und du hast viel Zeit, deinen Kundennutzen zu steigern.
  • Im vierten Teil schauen wir uns an, wie du mithilfe der Postmortem-Analyse Ausfälle und Probleme im Betriebsablauf optimal nutzen kannst, um die Betriebsstabilität deines Produktes zu verbessern. Damit schaffst du Freiräume, um dein Produkt weiterzuentwickeln.
  • Im fünften Teil schauen wir uns dann an, wie deine Betriebsabläufe und den IT Service Management aus Teamsicht strukturiert sein können, damit ihr die beiden Ziele „Betriebsstabilität“ und „Entwicklung neuer Features“ unter einen Hut bekommt.

Am Ende der Serie weißt du, wie modernes IT Operations in Produktteams heutzutage aussehen kann. Und wie du das ohne die Abhängigkeit von komplizierten, speziellen Cloud-Native-DevOps -Eierlegende-Wollmilchsau-Tools erreichen kannst.

Der Mythos: Chaos Monkey in Produktion

Ich kann nicht sagen, ob sich wirklich Unternehmen daran gemacht haben, ihre Produktion mit einem automatisierten Chaos zu testen. Falls sie es gemacht haben, haben sie vermutlich eine harte Zeit durchgemacht, mit Downtimes, kaputter Infrastruktur und hohen Verlusten. Ich kann nicht sagen, ob Netflix wirklich so getestet hat, oder ob es ein hochstilisierter Mythos ist. Allerding kenne ich niemanden, der damals dabei war. Deshalb kann ich nicht mit Sicherheit sagen, welche öffentlichen Aussagen von Netflix reines Marketing oder echte Fakten sind und bei welchen Aussagen sie sich gewünscht hätten, sie nie getroffen zu haben. Es gibt aber drei Fakten, die aus meiner Sicht wichtig sind:

  1. Netflix hat eine so komplexe Infrastruktur, dass es für unmöglich ist, diese zu überblicken. Im Sinne des Cynefin-Frameworks ist es ein komplexes System, Netflix selbst spricht sogar von einem chaotischen System.
  2. Netflix hat mit dem Chaos Engineering ein geeignetes Verfahren entwickelt, mit dem sie das chaotische System “Netflix” unter Kontrolle zu bringen und kontinuierlich dazuzulernen.
  3. Netflix hat verstanden, dass ein stabiles bzw. resilientes System nur dann stabil und resilient ist, wenn kontinuierlich das Gleichgewicht gestört und dieses durch Automatismen oder standardisierte Verfahren wiederhergestellt wird. Damit bildet das Team die Fähigkeiten aus, auch ungewöhnliche Situationen souverän zu meistern.

Stell es dir wie das das Training einer Mannschaft, das auf das nächste große Spiel vorbereitet, vor. Fast alle Aktionen im Spiel einer hochkarätigen Mannschaft sind einstudierte und perfektionierte Spielzüge, also Standardverfahren. Nur selten gibt es mal einen Geniestreich. Wie eine hochkarätige Mannschaft sollten sich auch Produktteams durch kontinuierliches Training ständig weiterentwickeln, um damit die Resilienz und Stabilität ihres Produktes weiter zu erhöhen. Dafür ist Chaos Engineering ein geeignetes Werkzeug.

Die ernüchternde Wahrheit über Chaos Engineering

Aber was ist Chaos Engineering eigentlich? Chaos Engineering ist ein vom wissenschaftlichen Vorgehen beeinflusstes Vorgehen, das kontinuierlich stattfindet. Es besteht aus 5 Phasen:

Stabilen Zustand herstellen (Steady State)

Steady State beschreibt den stabilen Zustand, in dem sich das System zu Beginn des Prozesses befinden muss. Das ist wichtig, damit du dir sicher sein kannst, dass es sich bei dem beobachteten Verhalten um einen kausalen Zusammenhang handelt.

Hypothese aufstellen (Hypothesis)

Es ist wichtig, sich vor dem eigentlichen Experiment klar darüber zu werden, was man eigentlich testen möchte. Typische Fragestellungen sind zum Beispiel:

  • Wie verhält sich die Queue, wenn der Konsument seine Events nicht abholt?
  • Welche Auswirkung hat es auf das Gesamtsystem, wenn ich den Parameter für die Heap-Size drastisch reduziere?
  • Was passiert, wenn zwischen dem Service und seiner Datenbank eine Latenz von größer 1 Sekunde ist?

Allerdings eignen sich diese Fragen noch nicht für gute Experimente. Deshalb muss eine konkrete Hypothese entwickelt werden. Beispiele zu den drei Fragen:

  • Wenn ein Konsument für 24 Stunden seine Events nicht vom Broker abholt, soll der Speicher des Brokers auch unter einer Last von 50.000 Events pro Minute weiterhin stabil laufen.
  • Wenn ich den Heap-Size des Services halbiere, bleibt die Antwortzeit bei normalerer Last von 10 Requests pro Sekunde konstant.
  • Wenn ich ich eine Latenz von einer Sekunde zwischen der Datenbank und dem Service einbaue, dann können dennoch alle Daten gespeichert werden.

Es handelt sich also immer um eine Wenn-Dann-Beziehung mit konkreten Messwerten. Natürlich lassen sich auch weitaus komplexere Beziehungen mithilfe des Chaos Engineerings darstellen. Meist lässt sich die zu testende Annahme allerdings so weit isolieren, dass es gar nicht nötig ist, komplexe Tests aufzubauen.

Experiment aufbauen und durchführen (Experiment)

Jetzt folgt der spannende Teil. Das Experiment wird aufgebaut und durchgeführt. Das Experiment beinhaltet immer

  • das notwendige Teilsystem (Komponenten/Services) in einem stabilen Zustand,
  • Werkzeuge, mit denen das System im Sinne der Hypothese beeinflusst werden kann (Latenz, Netzwerkabbrüche, Speichermangel auf Infrastruktur, …) und
  • Werkzeuge, um das Verhalten zu beobachten.

Geeignete Tools zum “Chaos stiften” sind zum Beispiel:

(Weitere Tools und Informationen finden sich unter der Awesome List)

Um das Verhalten zu beobachten, eignen sich die klassischen Observability Tools:

Überprüfung und Lernen (Verify & Learn)

Ist der Test erfolgreich durchgeführt, geht es an die Analyse. In dieser Phase steht im Vordergrund, das Ergebnis des Tests zu sichern, die Messwerte und Logs zu interpretieren und damit das Verständnis zu erhöhen. Das Ergebnis wird neben die Hypothese gelegt. Hat sich die Annahme bzw. die Hypothese bestätigt?

Ziel dieser Phase ist es, am Ende ein sicheres Gefühl für das Verhalten des Systems in dieser speziellen Situation zu erlangen.

Erkenntnisse zurückspielen

Wenn du regelmäßig dein System mit Chaos Engineering überprüfst, wirst du früher oder später über diverse Konfigurationsprobleme, schlecht gewählte Architekturpatterns und ungünstige Implementierungen stolpern. Das ist normal! Chaos Engineering erhält erst dann einen Wert, wenn die Erkenntnisse im Backlog erscheinen, priorisiert und zeitnah umgesetzt werden. Erst durch diesen Schritt wird Chaos Engineering von einer brotlosen Kunst zu einem wertvollen Werkzeug.

Tipps zum Chaos Engineering

Nachdem du nun die Chaos Engineering Methode kennengelernt hast und weißt, worauf du achten musst, gebe ich dir noch 5 Tipps, die ich mir leidvoll erarbeiten musste.

Keep it Simple

Beim Chaos Engineering kann man sich wunderbar in den Details verlieren. Es gibt Unmengen an Tools und viele interessante Artikel, die alle zeigen, was man alles tun kann. Allerdings verzetteln sich die Teams meist damit, wenn sie Chaos Engineering einführen wollen. Deshalb mein Tipp: Nutze erst einmal ganz einfache Tools und führe die Chaos-Tests lokal durch. Der Toxiproxy ist ein solches Werkzeug. Wenn du beispielsweise auf Containern basierende Microservices betreibst, rate ich dir, die notwendigen Container mithilfe von docker-compose zu starten, eventuell Mocks hinzuzufügen und mit dem Toxiproxy Verbindungsabbrüche, Latenzen und ähnliches zu überprüfen. Damit kannst du das Verfahren erlernen, ohne dich in den Untiefen deiner Kubernetes-Distribution und den eingesetzten Profi-Tools zu verirren.

Blast Radius reduzieren

Chaos Engineering hat den “Charme”, dass man versehentlich sehr viel zerstören kann. Es ist ein mächtiges Werkzeug, dass es zu kontrollieren gilt. Deshalb sind zwei Punkte für den Erfolg essenziell: Eine gute Kommunikation an alle betroffenen Stakeholder und ein Versuchsaufbau, der möglichst wenige Menschen betrifft. Die meisten Tests können in einer Staging-Umgebung oder (noch besser) auf einem lokalen Entwicklungsrechner durchgeführt werden, ohne dass sie an Aussagewert verlieren. Es gibt allerdings Fälle, die sich nur in einer bestimmten Konstellation überprüfen lassen. Hier ist eine geeignete Kommunikation maßgeblich: Alle Schnittstellenpartner müssen informiert sein, alle notwendigen Kollegen “Gewehr bei Fuß” stehen, damit im Notfall alle koordiniert eingreifen und die auftretenden Probleme lösen können. Ein mahnendes Beispiel für einen schief gelaufenen Chaos Test ist die Nuklearkatastrophe am 26.04.1986 im Atomkraftwerk in Tschernobyl. Auch wenn die meisten von uns keine solch kritische Infrastruktur betreiben, zeigt es dennoch, wie durch schlechte Planung, unzureichend ausgebildete Fachkräfte und eine starre Führung eine Katastrophe zu einem Super-GAU werden kann. Gut geplante und durchgeführte Chaos-Tests beschützen euch vor solchen Szenarien.

Chaos Days durchführen

Ein gutes Beispiel, bei dem Schwarmintelligenz und soziale Interaktionen zu noch besseren Ergebnissen führen können sind die sogenannten Chaos Days. Einfach zusammengefasst sind Chaos Days ein Workshopformat, in dem dein Team und andere Stakeholder gemeinsam die Chaos Tests durchführen. Dafür werden zu Beginn mithilfe eines Brainstormings die möglichen Hypothesen identifiziert, die überprüft werden sollen. Danach werden diese gemeinsam ausformuliert und der gesamte Prozess gemeinsam durchlaufen. Dadurch stärkt sich der Wissens- und Erfahrungsaustausch, die Kollegen lernen miteinander das System und seine Schwächen kennen und die Zusammenarbeit im Alltag wird durch das neu gewonnene Vertrauen gestärkt. Alles in allem ist es eine gut investierte Zeit, wenn es zielgerichtet abläuft, gut vorbereitet ist und das gemeinsame Erarbeiten im Vordergrund steht.

Einplanen und regelmäßig durchführen

Wir alle arbeiten nach einem bestimmten Vorgehensmodell. Unabhängig davon, ob es nun Wasserfall, Scrum oder Kanban ist: Chaos Engineering entfaltet erst dann seine volle Wirkung, wenn es regelmäßig durchgeführt und die Ergebnisse zeitnah umgesetzt werden. Ob man nun vierteljährlich Chaos Days durchführt oder im Sprint immer wieder Hypothesen in Form von User Stories überprüft ist erst einmal zweitrangig. Wichtig ist, dass es gegenüber neuen Features nicht ins Hintertreffen gerät.

Reproduzierbarkeit und Nachvollziehbarkeit sicherstellen

Chaos Tests sind nur dann etwas Wert, wenn sie reproduzierbar und nachvollziehbar sind. Wenn ein Test durchgeführt wurde und ein paar Wochen später nicht mehr klar ist, wie der Versuchsaufbau aussah und welche Ergebnisse der Test hatte: Wie willst du dann die Verbesserung überprüfen, wenn du dein System entsprechend angepasst hast? Hier hilft das strukturierte Dokumentieren des Versuchsaufbaus und der Ergebnisse sowie das Sichern des Versuchsaufbaus in git. Damit habt ihr gleichzeitig eine Referenz für zukünftige Chaos Tests und könnt die bestehenden jederzeit wiederholen.

Fazit

Richtig angewendet ist Chaos Engineering ein mächtiges Werkzeug, mit dem du und dein Team das Chaos und die modernen, verworrenen Architekturen analysieren und meistern kannst. Es gibt kaum eine Methode, mit der du schneller das Wissen teilen, Erfahrung aufbauen und die Betriebsstabilität erhöhen kannst. Gleichzeitig ist Vorsicht geboten. Mit ein paar schlecht geplanten Handgriffen kann man sich die Stage, ggf. auch die Produktion zerschießen.

Ob Netflix nun den Chaos Monkey in Produktion einsetzt oder nicht. Der Weg dahin, kontrolliertes Chaos in einer produktiven Umgebung anzurichten und damit das Team fit zu halten, ist lang. Dafür benötigst du ein sehr genaues Wissen darüber, was du und dein Team leisten können und bereits eingespielte Verfahren, das angerichtete Chaos im Griff zu behalten.

Ich wünsche dir viel Spass dabei, dieses mächtige Werkzeug auszuprobieren,

Und jetzt du!

Hattest du bereits Kontakt zum Chaos Engineering? Wie fühlte es sich an, methodisch die Komplexität moderner Produkte zu durchdringen? Oder hast du schlechte Erfahrungen gemacht, die du gerne teilen möchtest?

Ich freue mich darauf, deine Kommentare zu diesem Thema zu lesen!

Deine Reise beginnt hier:

Schaffe dir mit meinem kostenlosen E-Mail-Kurs den Freiraum für wichtige Veränderungen!

Lerne in 7 einfachen Schritten, wie du die ungeplante Arbeit in deinem Team in den Griff bekommst, damit dein Team sich auf das Wesentliche konzentrieren kann.

Ungeplante Arbeit: Dein Produktivitätskiller Nr. 1!

Kennst du den Begriff „ungeplante Arbeit“? Nur wenige Menschen machen sich Gedanken darüber, wie ungeplante Arbeit ihre Produktivität torpediert. Dabei ist sie die Hauptursache dafür, dass es in den meisten Unternehmen oft so chaotisch abläuft. Meist nehmen wir dieses Chaos sogar als normal wahr.

Wenn du und dein Team zu den Top-Performern im Unternehmen aufsteigen wollt, gibt es genau eine Fähigkeit, die über Sieg oder Niederlage entscheidet:

Euer Umgang mit der ungeplanten Arbeit!

In diesem E-Mail-Kurs erhältst du 7 Wochen lang jeweils einen Impuls oder Werkzeug und eine klare Aufgabe, die du in dieser Woche umsetzen sollst. Die Umsetzung selbst nimmt nicht viel Zeit in Anspruch.

Wenn du dranbleibst und die Aufgaben gewissenhaft bearbeitest, schaffst du es innerhalb der 7 Wochen die Arbeit in deinem Team zu revolutionieren! Garantiert ohne Überlastung und Bürokratie! 

Lerne in meinem kostenlosen Online-Kurs, wie du das Fundament für ein erfolgreiches Produktteam legst, das sowohl die Software-Entwicklung als auch das IT-Operations locker im Griff hat.

Er ist unverbindlich (du kannst dich jederzeit abmelden) und noch für kurze Zeit vollständig kostenlos!

Was dich noch interessieren könnte:

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert