Chaos Engineering für bessere Systeme

Die Zuverlässigkeit von Software und Systemen wird üblicherweise mit Unit Tests, Integration Tests und System Tests sichergestellt. Jetzt wo Systeme in der Cloud bereitgestellt werden und diese verteilten Systeme zunehmend umfassender und komplexer werden, stösst dieses Verfahren an seine Grenze. Hier kommt Chaos Engineering ins Spiel.

Chaos Engineering führt Experimente auf einem System durch, um Vertrauen in das System aufzubauen. Es soll sichergestellt werden, dass auch unter widrigen Umständen die Produktivumgebung funktioniert. Es ist eine Möglichkeit mit Dynaxability umzugehen.

Die Fortschritte in verteilten und hoch-skalierten Software-Systemen verändern die Spielregeln des Software Engineering. Es geht auch darum die Flexibilität in der Software-Entwicklung und die Geschwindigkeit von Deployments zu erhöhen. Es bleibt eine Frage: Wie sehr können wir dem System vertrauen, das wir in die Produktivumgebung eingespielt haben?

Selbst, wenn alle einzelnen Dienste in einem verteilten System ordnungsgemäss funktionieren, kann die Kommunikation zwischen diesen Diensten unerwartete Ergebnisse zeigen. Diese Möglichkeit sowie seltene, aber nachteilige Vorfälle in der Produktivumgebung machen verteilte Systeme inhärent chaotisch.

Der Ablauf beim Chaos Engineering

Auch wenn der Name etwas anderes andeutet, Chaos Engineering läuft nicht chaotisch, sondern geplant ab. Als erstes gilt es zu bestimmen, welche Bereiche oder Komponenten über ihre Grenzen hinaus belastet werden sollen: Infrastruktur, Netzwerk oder Anwendungen? Es kann sich auch um Dienste handeln, die eine Rolle spielen.

Man kann Chaos Engineering als die Durchführung von Experimenten betrachten, um Schwachstellen in verteilten Systemen zu finden. Die Experimente laufen in vier Schritten ab:

  1. Starte damit einen „stabilen Zustand“ als einen messbaren System-Output zu definieren, der ein normales Verhalten des Systems signalisiert.
  2. Stelle die Hypothese auf, dass der stabile Zustand sowohl in der Kontrollgruppe also auch in der Experimentalgruppe erhalten bleibt.
  3. Führe Variablen ein, die echte Vorfälle aus dem produktiven Betrieb repräsentieren etwa Server-Abstürze, Festplattenfehlfunktionen, unterbrochene Netzwerkverbindungen, falsche Daten.
  4. Versuche die Hypothese zu falsifizieren, indem du den System-Output von Experimental- und Kontrollgruppe nach Unterschieden in Bezug auf den definierten stabilen Zustand untersuchst.

Chaos Engineering in der Praxis

Wer mehr dazu wissen möchte, hier einige Einblicke in die Erfahrungen von Netflix.

Vorteile beim Chaos Engineering

In der Praxis passiert es immer wieder, dass es zu einer Verkettung von Situation kommt, auf die Unternehmen nicht vorbereitet sind und die oftmals sehr teuer werden können. Wenn es bei einem Car-Sharing-Anbieter zu einem Systemausfall und lassen sich infolgedessen keine Autos mieten, dann steigen die Umsatzausfälle minütlich an. Unternehmen haben daher grosses Interesse an fehlertoleranten, redundanten und damit belastbaren Systemen.

Fazit

Hier noch einmal die wichtigsten Punkte und Vorteile des Chaos Engineering:

  • Die Erhöhung der Robustheit bzw. Resilienz eines Systems ist der ultimative Vorteil.
  • Die Anwendung schärft die Sinne für die mögliche Existenz und daraus resultierende Konsequenzen von Komponenten- oder Systemausfällen. So offenbaren sich Abhängigkeiten innerhalb der Systeme
  • und zwischen verschiedenen technischen Ebenen, die nicht immer für alle Beteiligten offensichtlich sind. Das wiederum steigert das Verständnis des Systemverhaltens.
  • Sind die Erkenntnisse ausgewertet und die entdeckten Schwachpunkte beseitigt, lässt sich das Experiment automatisieren. So trägt es direkt zur Zuverlässigkeit des Systems bei.

Probieren Sie es mal aus, sie werden viel Freude dabeihaben. Ich bin überzeugt, dass wir damit die Stabilität unserer Systeme weiter erhöhen können.