Chaos Engineering
Chaos Engineering ist der Prozess des Testens eines verteilten Computersystems, um sicherzustellen, dass das System unerwarteten Funktionsunterbrechungen standhält. Der Prozess wird so genannt, da es sich auf Konzepte aus der Chaostheorie stützt, die sich auf zufälliges und unvorhersehbares Verhalten konzentriert. Das Ziel des Chaos Engineering ist die kontinuierliche Durchführung kontrollierter Tests, die zufälliges und unvorhersehbares Verhalten einführen, um Schwachstellen in einem System aufzudecken.
In der Informatik ist ein verteiltes System (distributed system) jede Gruppierung von Computern, die über ein Netzwerk miteinander verbunden sind und Ressourcen gemeinsam nutzen. Verteilte Systeme können zusammenbrechen, wenn unerwartete Bedingungen oder Situationen (wie zum Beispiel eine unbeabsichtigte Änderung durch eine absichtliche Aktualisierung) auftreten.
Große verteilte Systeme weisen komplexe und unvorhersehbare Abhängigkeiten zwischen Komponenten auf, was die Fehlerbehebung erschweren kann. An dieser Stelle kommt Chaos Engineering ins Spiel. Chaos Engineering identifiziert Was-wäre-wenn-Szenarien, die darauf abzielen, Ausfälle auszulösen, so dass die Systemeigentümer die Leistung und Integrität der Software bewerten können.
Stellen wir uns zum Beispiel ein verteiltes Softwaresystem vor, das für die Verarbeitung einer bestimmten Anzahl von Transaktionen pro Sekunde ausgelegt ist. Chaos Engineering versucht, herauszufinden, wie die Software reagiert, wenn diese Grenze erreicht oder überschritten wird und die Leistung leidet oder das System abstürzt.
Das Szenario kann in einem Chaos Engineering Setup simuliert werden, um zu sehen, wie sich das System verhält, wenn es einen Mangel an Ressourcen oder einen Punkt des Ausfalls erlebt. Wenn das System beim Testen ausfällt, können die Entwickler Designänderungen vornehmen, die dem Szenario angemessen Rechnung tragen, oder Wege hinzufügen, um es ganz zu vermeiden. Sobald Designänderungen vorgenommen wurden, wird derselbe Test wiederholt, um die gewünschten Ergebnisse zu verifizieren.
Wie Chaos Engineering funktioniert
Wie Stresstests zielt Chaos Engineering darauf ab, das Design eines Systems oder Netzwerks zu verbessern, indem seine Schwächen entdeckt und korrigiert werden. Der Prozess ist typischerweise in mehrere Schritte unterteilt und beginnt mit der Erstellung einer Baseline. Die Tester müssen zunächst ermitteln, wie das System unter optimalen Bedingungen funktionieren soll, und festlegen, was einen normalen Betriebszustand darstellt.
Als nächstes müssen sie eine oder mehrere potenzielle Schwachstellen in Betracht ziehen und eine Hypothese über die Auswirkungen dieser Schwachstellen formulieren. Zum Beispiel könnten Softwaretester wissen wollen, was passiert, wenn eine große Verkehrsspitze auftritt. Sie stoßen dann Experimente an, um die Folgen einer großen Verkehrsspitze abzuschätzen. Die Experimente können einen Fehler in einem kritischen Prozess oder eine unerwartete Ursache-Wirkungs-Beziehung aufdecken. Beispielsweise kann die Verkehrsspitzensimulation eine unerwartete Leistungsverschlechterung bei der Speicherung zeigen.
Chaos Engineering kann für ein noch nicht gestartetes Programm durchgeführt werden, und es kann noch viel gelernt werden. Die genauesten Ergebnisse lassen sich jedoch durch Tests unter realen Bedingungen erzielen. Aus diesem Grund wird Chaos Engineering oft auf Produktionssystemen durchgeführt, insbesondere wenn es zu umständlich oder teuer ist, eine große, verteilte Systemumgebung nur für Testzwecke zu duplizieren.
Das bedeutet natürlich auch, dass Chaos Engineering störend sein kann. Erfolg mit dem Chaos-Engineering-Paradigma erfordert eine enge Kommunikation und Koordination zwischen IT-Mitarbeitern und -Entwicklern sowie zwischen den Geschäftsbereichen. Experimente werden nur selten zu Spitzenzeiten durchgeführt, um zu vermeiden, dass die Kunden ein negatives Erlebnis haben.
Chaos Engineering Tools
Chaos Engineering ist ein relativ neuer Ansatz für Softwaretests und Softwarequalitätssicherung (Quality Assurance, QA). Netflix ist ein Pionier des Chaos Engineering und gehört zu den ersten, die formalisierten, wie es in Produktionssystemen eingesetzt werden kann. Netflix entwarf und entwickelte Automatisierungsplattformen für Chaostests, darunter Chaos Monkey, Chaos Gorilla und ähnlich benannte Tools, die gemeinsam als die Simian Army bezeichnet werden.
Chaos Monkey deaktiviert zum Beispiel nach dem Zufallsprinzip Produktionsinstanzen, um einen Systemausfall zu gewährleisten, wurde aber so konzipiert, dass es keine Auswirkungen auf den Kunden hat. Chaos Gorilla erledigt die gleiche Aufgabe in einem größeren geografischen Maßstab. Die Netflix Simian Army wächst weiter und es werden immer mehr chaosverursachende Programme entwickelt, um ihre Dienste zu testen.
LinkedIn verwendet ein weiteres Open-Source-Programm namens SIMOORG, das ein Scheitern verursacht. Monkey-Ops, ein in Go implementiertes Open Source Tool, wird zum Testen und Beenden von Zufallskomponenten und Einsatzkonfigurationen gebaut. Der Gremlin ist ein weiteres Chaos-Engineering-Programm.