Notfallvorsorge mit Hilfe des Chaos Engineering

06.10.2021

Notfallvorsorge mit Hilfe des Chaos Engineering

Was ist eigentlich Chaos Engineering?

Bei der Entwicklung oder der Nutzung von Software lässt sich nicht jede Herausforderung, und deren Auswirkungen unbedingt vorhersagen. Doch mit Hilfe des Chaos Engineering können potentzielle Probleme gezielt durch die Institution getestet werden. Das Resultat ist im Ernstfall ein verlässlicheres System bzw. eine verläsliche Software defined Infrastruktur.

Warum kann Chaos Engineering bei der Notfallvorsorge und beim verlässlichen Betrieb helfen?

Bei der Entwicklung von Software wird normalerweise ein großes Augenmerk darauf gelegt, verlässliche, sichere und zuverlässige Lösungen zu entwickeln. Typischerweise wird hierfür der Begriff „resiliency“ verwendet. Mit Hilfe von Unit- und Integrationstests arbeiten Softwareentwickler an der Zuverlässigkeit ihrer Software, doch in reellen Szenarien verteilter Systeme und deren Abhängigkeiten durch die immer stärke Digitalisierung von Prozessen und Prozessketten kommen diese Methoden an ihre Grenzen.

Moderne Systeme weisen mitlerweile so viele Komponenten und Komplexitäten auf, dass diese sich mit regulären Entwicklungsmethoden kaum mehr wirklich abdecken lassen. Chaos Engineering liefert ein Entwicklungsmodell, in dem unerwartete Szenarien getestet werden und Software ganz gezielt an ihre Grenzen und darüber hinaus getrieben wird. In zeitgemäßen Systemen befindet sich eine für Softwareentwickler unüberschaubare und wachsende Komplexität, die jederzeit unberechenbare Probleme aufrufen kann.

Mit Hilfe des Chaos Engineering kann somit gezielt versucht werden, Dinge kaputtzumachen und Fehler bewusst herbeizuführen, um im Rahmen der normalen Entstörungsprozesse festzustellen, wie die Systeme in unerwarteten Situationen innerhalb der Institution reagieren. Im Umkehrschluss kann der Einsatz von Chaos Engineering als proaktive Verbesserung der Notfallvorsorge angesehen werden.

Bevor jedoch Chaos Enginnering flächendeckend bei einer Institution genutzt wird, muss ein Umdenken erfolgen, weg vom Development-Modell, in dem keine Zusammenbrüche die Normalität sind, hin zum Denken, dass ein Ausfall unvermeidbar ist. Durch die Technik des Chaos Engineering können gezielter redundante Systeme unter Berücksichtigung von maximal tolerierbarer Ausfallzeit und der festgelegten Wiederherstellbarzeit geschaffen werden, so dass die Benutzer der Lösung von Fehlern nicht mehr betroffen bzw. nicht mehr so hard betroffen sind.

Wie funktioniert Chaos Engineering in der Praxis?

Ganz grob umrissen basiert der Prozess des Chaos Engineering auf dem Experimentieren mit den Grenzen einer Software. Hierzu wird zunächst ein stabiler Zustand definiert, in dem ein System als normal definiert arbeitet. Mittels einer Kontrollgruppe wird sichergestellt, dass es das chaotische Szenario ist, was das System beeinflusst, die Kontrollgruppe arbeitet außerhalb dieses Testszenarios weiter.

In das Testszenario werden nun Problemstellungen eingeführt (Servercrashs, defekte Festplatten, Ausfälle, Überlastungsszenarien). Dabei geht es im Chaos Engineering vor allem darum, den Umgang mit diesen Problemstellungen zu testen. Wie lassen sich die Grenzen eines Systems erweitern? Welche Redundanzen sind notwendig, um den bestehenden Service lauffähig zu halten? Und wie können gegebene Schwächen ausgemerzt werden?

Um mehr Vertrauen in ein System zu gewinnen, ist es essentiell, Fehler zu begrenzen und die stabile Systemzustände so weit wie möglich aufrecht zu erhalten. Gerade deswegen ist es unerlässlich, Systeme kritischen Tests auszusetzen und gezielt Fehler herbei zu führen.

Ein bekannter Anwender des Chaos Engineering

Die Technik des Chaos Engineering wurde in den vergangenen Jahren vor allem vom US-amerikanischen Streaming-Dienst Netflix voran getrieben. Auch wenn Netflix nicht derart mit digitalem Fortschritt assoziiert wird wie Apple oder Microsoft, besitzt das Unternehmen eine gigantische digitale Infrastruktur und legt entsprechenden Wert darauf, dass diese fehlerfrei funktioniert.

An einem einfachen Beispiel erklärt: Ein System ist für eine gewisse Maximalzahl an Abrufen pro Sekunde gebaut worden. Wie reagiert dieses System, wenn die Maximalzahl erreicht und überschritten wird? Wie reagiert welcher Teil der Software an welchen Punkten? Dabei müssen nicht alle getesteten Szenarien alltagsorientiert sein, ein spannender Teil des Chaos Engineering ist die Entwicklung hypothetischer Szenarien.

Softwarebeispiel für Chaos Engineering

Um in der Praxis Chaos Engineering durchzuführen, setzt Netflix auf die Software Simian Army (1).

Chaos Gorilla etwa deaktiviert eine gesamte Verfügbarkeitszone in der Server-Infrastruktur.

Chaos Kong deaktiviert sogar eine gesamte Region in der AWS-Infrastruktur von Amazon (2).

Byte Monkey testet Fehlerquellen im Java-Code von JVM-Anwendungen und Latency Monkey testet Verzögerungen in der Kommunikation wie sie etwa bei Netzwerkausfällen auftreten.

Die Komplexität dieser herbeigeführten Fehler zeigt bereits in den erwähnten Auszügen, wie großflächig Fehler in verteilten Systemen auftreten können. Neben Simian Army kommen auch Tools wie SIMOORG (Open Source) oder Monkey Ops (in Go implementierte Software) hierbei zum Einsatz.

Literaturverzeichnis

[1] Software Simian Army -- https://netflix.github.io/chaosmonkey/

[2] Chaos Kong -- https://netflixtechblog.com/chaos-engineering-upgraded-878d341f15fa

%cmsData(privacy-policy)%

%cmsData(terms-conditions)%