Definition „Chaos Testing“ Was ist Chaos Engineering?

Von Gedeon Rauch |

Anbieter zum Thema

Nicht jede Herausforderung, der Software und verteilte Systeme sich stellen müssen, lässt sich unbedingt vorhersagen. Doch mit Chaos Engineering können Probleme gezielt getestet werden. Das Resultat ist im Ernstfall ein verlässlicheres System.

Etliche Chaos-Engineering-Tools basieren auf der Idee des IT-Spezialisten Antonio Garcia Martinez, dass Affen eine Software nutzen und Fehler provzieren.
Etliche Chaos-Engineering-Tools basieren auf der Idee des IT-Spezialisten Antonio Garcia Martinez, dass Affen eine Software nutzen und Fehler provzieren.
(Bild: a_m_o_u_t_o_n / Pixabay)

In der Softwarentwicklung liegt großes Augenmerk darauf, verlässliche, sichere und zuverlässige Systeme zu entwickeln. Im Englischen geht damit der Begriff „resiliency“ einher, zu Deutsch Elastizität, Belastbarkeit oder Robustheit.Mit Unit- und Integrationstest arbeiten Developer an der Zuverlässigkeit ihrer Software, doch in reellen Szenarien verteilter Systeme kommen diese Methoden an ihre Grenzen.

Moderne Systeme weisen so viele Komponenten und Komplexitäten auf, dass diese sich mit regulären Entwicklungsmethoden kaum mehr abdecken lassen. Chaos Engineering geht einen anderen Weg: Es wird gezielt versucht, das System kaputtzumachen und Fehler herbei zu führen, um festzustellen, wie die Systeme in unerwarteten Situationen reagieren.

Chaos Engineering – die digitale Chaostheorie mit dem prominenten Schirmherren

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.

Chaos Engineering liefert dabei 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 Entwickler unüberschaubare und wachsende Komplexität, die jederzeit unberechenbare Probleme aufrufen kann.

Dem liegt auch ein Umdenken zugrunde, weg vom Development-Modell, in dem keine Zusammenbrüche die Normalität sind, hin zum Denken, dass ein Crash unvermeidbar ist. Durch die Technik des Chaos Engineering können gezielter redundante Systeme geschaffen werden, so dass die Endkunden von Fehlern nicht mehr betroffen sind.

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.

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.

Simian Army – ein Softwarebeispiel für Chaos Engineering

Um diese Tests in der Praxis durchzuführen, setzt Netflix auf die Software Simian Army. Diese Fehler-Suite simuliert (in den Worten des IT-Technikers Antonio Garcia Martinez im Buch „Chaos Monkeys“) eine Situation, in der Affen die Software nutzen und diverse Fehler herbei führen. Entsprechende Namen tragen verschiedene Testing-Tools.

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

Dabei bemerkt der Endkunde natürlich nichts von der Komplexität, die selbst kleinsten Operationen zugrunde liegt und soll diese auch nicht bemerken. Ausfall bedeutet für Unternehmen immer einen potentiellen Umsatzverlust und Chaos Engineering ist nur eine Methode, um Ausfälle unwahrscheinlicher zu machen.

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

Chaos Engineering sichert dies in der Praxis ab liefert im Resultat fehlertolerantere Software und zufriedenere Kunden. Für IT-Developer bietet Chaos Engineering zudem eine reizvolle Methode, auch jenseits der Softwareentwicklung mal realistische, mal skurrile Fehlerszenarien zu testen. Dies verwischt die Grenze zwischen Softwareentwicklung und Qualitätssicherung, um mehr Stabilität und Resilienz zu kreieren.

(ID:46919647)