Chaos Engineering: Für kontrollierte Unordnung sorgen

Das Thema Chaos Engineering erfährt immer mehr Aufmerksamkeit. Aber warum soll man absichtlich etwas kaputt machen?

Architektur/Methoden  –  31 Kommentare

(Bild: Shutterstock.com / von makasana photo)

Für Entwickler ist es ein primäres Ziel, stabile, sichere und fehlerfreie Software zu entwickeln, die auch in Produktion keine Nerven kostet und von der weiteren Arbeit abhält. Um dieses Ziel zu erreichen, schreiben Entwickler Unit- und Integrationstests, die das erwartete Verhalten überprüfen und sicherstellen, dass die getesteten Muster zu keinem Fehler führen. In zeitgemäßen Architekturen finden sich allerdings viele Komponenten, die diese nicht abdecken können. Es gibt unbekannte Server oder Komponenten, die es schaffen, das Gesamtsystem zum Ausfall zu bringen.

Deshalb hat das Streaming-Portal Netflix in den letzten Jahren das Thema Chaos Engineering vorangetrieben und viel zu seiner wachsenden Bedeutung beigetragen. Es startete mit der Entwicklung eines Chaos Monkey, der die Aufgabe hat, laufende AWS-EC2-Instanzen per Zufall zu zerstören.

Das Wissen, dass die Instanzen jederzeit ausfallen können, hat bei Entwicklern, Operations und beim Applikationsdesign zu einem Umdenken geführt. Die Wahrscheinlichkeit von einem Ausfall betroffen zu sein erhöht sich deutlich und muss durch den Einsatz passender Pattern aus dem Werkzeugkasten des Resilient Software Design gemildert und aktiv bekämpft werden.

Komplexität moderner Systeme

Zeitgemäße und hochverfügbare Systeme sind komplex und nicht auf den ersten Blick zu begreifen. Es muss sichergestellt sein, dass die autonom entwickelten und jederzeit neu deployen Applikationen ihre benötigten Ressourcen und Abhängigkeiten finden und auf sie zugreifen können. Ein temporärer Ausfall durch ein neues Deployment oder einen Fehler in einer Abhängigkeit darf nicht zum Ausfall der Applikation führen. Die Applikation muss mit den Störungen umgehen können und mit einem passenden Verhalten darauf reagieren.

Im Fokus müssen dabei die Kunden stehen. Er soll jederzeit das Gefühl und die Sicherheit haben, dass das System in einem stabilen Zustand ist. Aus Unternehmenssicht ist der durch einen Ausfall mögliche Umsatzverlust eine direkte Auswirkung. Eine weitere ist ein möglicher Schaden des Rufs, den der Service bei den Kunden genießt. Ist die Verfügbarkeit und das Verhalten unbefriedigend, spricht sich das in einer vernetzten Welt schnell herum und hat ebenfalls eine direkte Auswirkung auf den Umsatz. Ist es zu solch einer Welle der Entrüstung in den sozialen Medien gekommen, können Unternehmen darauf nicht mehr angemessen und kontrolliert reagieren.

Neben dem Ziel, eine stabilere Software zu entwickeln, sollte man den sozialen Aspekt beim Chaos Engineering nicht unterschätzen. Es geht nicht darum, etwas zu zerstören, sondern die richtigen Menschen an einen Ort zu bringen und gemeinsam das Ziel einer stabilen und fehlertoleranten Software zu verfolgen. Chaos Engineering darf nicht dazu dienen, Kollegen ihre gemachten Fehler oder falsch getroffenen Entscheidungen beim Entwickeln der Software vorzuführen oder sie zu beschuldigen. Das Ziel sollte sein, Software zu verbessern und Kunden den bestmöglichen Service anzubieten. Auch wenn im Hintergrund die Hütte brennt, darf das keinen gravierenden Einfluss auf den Kunden haben.