Was ist Chaos Engineering?

Ihre Kunden, Kunden, Besucher – und sogar interne Mitarbeiter – verlassen sich darauf, dass Ihre Systeme jederzeit funktionieren, verfügbar und leistungsfähig sind. In einer perfekten Welt würde es nie einen Begriff dafür geben, wann Systeme, Anwendungen und Dienste aus dem Aus gehen, aber dies ist keine perfekte Welt, und leider verlaufen die Dinge manchmal nicht wie geplant. Ausfälle und Ausfallzeiten können Unternehmen Millionen von Dollar kosten. Manchmal ist der beste Plan ein Plan für das Unerwartete, was genau das ist, was Chaos Engineering zu lösen versucht. Chaos Engineering, auch als Chaos testing bezeichnet, kann als Disziplin oder Ansatz zum Testen und Erstellen eines Systems betrachtet werden, das unerwarteten Fehlern oder Bedingungen standhält.

Mit dem Aufkommen von DevOps-Praktiken haben Organisationen von Startups bis hin zu Unternehmen langsam ihre eigenen Chaos-Testpraktiken in ihre Entwicklungsworkflows übernommen. Unabhängig davon, ob Chaos Engineering von bestimmten Teams oder als Teil der Verantwortung für Site Reliability Engineers (SREs)durchgeführt wird, ist die Praxis des Chaos Engineering darauf ausgelegt, versteckte Schwachstellen in Systemen, Anwendungen und Diensten aufzudecken und sicherzustellen, dass es den extremsten Situationen für vollständige Ausfallsicherheit standhalten kann.

Chaos Engineering vs. Leistungstests

Wie Bei Stresstests oder Lasttestshilft Chaos Engineering Teams, Sollbruchstellen oder Fehler zu identifizieren, indem abnormale oder instabile Umgebungen erstellt werden. Einer der Hauptunterschiede zwischen Chaos Engineering und Performance Testing besteht jedoch darin, dass sich Chaos Engineering nicht nur auf einige Schlüsselkomponenten konzentriert, sondern aus einer scheinbar unbegrenzten Anzahl von Faktoren bestehen kann, die außerhalb des Rahmens der normalen und offensichtlichen Testüberlegungen liegen. In großen, verteilten Netzwerkumgebungen können Systeme aus einer Vielzahl von Gründen ausfallen, die im Vergleich zu anderen Umgebungen nicht so einfach aufzudecken sind. Die Aufdeckung dieser Schwachstellen hilft Teams zu verstehen, wo sich Schwachstellen befinden, um zu verhindern, dass diese potenziellen Fehler jemals auftreten.

Chaos (Engineering) ist geboren

Die Praxis des Chaos Engineering entstand bei Netflix um 2008, nachdem sie ihren Streaming-Dienst offiziell gestartet hatten. Nach einem Datenbankbeschädigungsproblem um 2011 plante Netflix, sein Rechenzentrum über AWS (Amazon Web Services) in die Cloud zu überführt. Tatsächlich brauchten sie acht Jahre, um die Migration endlich abzuschließen. Im Jahr 2015 erlebte AWS einen Ausfall, der dazu führte, dass Netflix für mehrere Stunden ausging. Dies waren die Anfänge des Cloud Computing, daher war es nicht so robust, stabil und ausfallsicher wie heute. Als sie feststellten, dass der Wechsel in die Cloud einige der erwarteten Vorteile wie Skalierbarkeit, Verfügbarkeit, Vermeidung von Single Points of Failure, automatische Skalierung usw. nicht mit sich bringt, entschieden sie, dass sie eine Möglichkeit benötigten, auf diese unerwarteten Probleme zu testen, um sicherzustellen, dass ihre Dienste betriebsbereit sind und letztendlich die Auswirkungen auf die Benutzer vermeiden und Frustration verursachen. Aus dieser Erfahrung wurde Chaos Engineering geboren.

Chaos Engineering Prinzipien & Schritte

Chaos Engineering versucht nicht, Chaos zu schaffen, nur um Chaos zu schaffen. Vielmehr ist es auf der Grundlage einer Reihe präziser Prinzipien und Schritte darauf ausgelegt, Pläne und Experimente durchdacht zu erstellen, um zu lernen, wie Risiken in großen, verteilten Systemen und Netzwerken gemindert werden können. Im Folgenden sind die Schritte zum Erstellen einer allgemeinen Richtlinie für Chaosexperimente aufgeführt.

Schritt 1: Erstellen einer Hypothese

Dies besteht darin, allgemeine Annahmen darüber zu treffen, wie ein System reagieren wird, wenn instabile Faktoren und Bedingungen im Vergleich zur normalen Umgebung eingeführt werden. Hier legen Sie auch fest, welche Metriken wie Fehlerraten, Latenz, Durchsatz etc. während des Chaos-Experiments gemessen werden sollen.

Schritt 2: Identifizieren von Variablen und Antizipieren von Auswirkungen

Überlegen Sie, was passieren könnte, wenn diese hypothetischen Ereignisse in realen Situationen auftreten würden. Wenn Ihr Server beispielsweise unerwartet abstürzt oder der Datenverkehr erheblich zunimmt, wie wirkt sich dies auf Ihr Gesamtsystem aus?

Schritt 3: Starten des Experiments

Im Idealfall möchten Sie Ihr Chaos-Experiment in einer Live-Produktionsumgebung durchführen. Es müssen jedoch Schutzmaßnahmen vorhanden sein, um ein Worst-Case-Szenario zu verhindern. Sie möchten sicherstellen, dass Sie immer noch eine gewisse Kontrolle über die Umgebung haben, wenn das Experiment seitwärts verläuft. Dies wird auch als Steuerung des Explosionsradius bezeichnet. Diese Experimente können für eine bessere Analyse automatisiert werden und sind nachhaltiger als die manuelle Ausführung. Eine andere Methode, die manchmal verwendet wird, ist die Verwendung einer vollwertigen Testumgebung, aber auch dies spiegelt möglicherweise nicht wider, was in der realen Welt passiert.

Schritt 4: Messen Sie die Auswirkungen

Wie entsprechen die Ergebnisse der Ausgangshypothese? Basierend auf den Metriken, die in der Hypothese festgelegt wurden, war das Experiment zu begrenzt oder muss es skaliert werden, um Fehler und Fehler besser zu identifizieren? War der Explosionsradius zu begrenzt? Vielleicht muss es skaliert werden, um die Fehler auszuweisen, die in einem realen Szenario auftreten würden. Dieses Experiment kann auch zusätzliche Probleme aufdecken, die untersucht werden müssen.

Chaos Engineering Tools

Gehen wir zurück zur Einführung von Chaos Engineering mit Netflix. Sobald sie die Entscheidung getroffen haben, in die Offensive zu gehen und mit der Zuweisung von Ressourcen für ein Engineering-Team zu beginnen, mussten sie einen formalisierten Satz von Praktiken und Tools erstellen, um Engineering-Teams bei der Durchführung von Chaostests zu unterstützen. Eine der frühen Anwendungen, die Netflix einführte, hieß Chaos Monkey. Jeden Tag wählte diese Anwendung zufällig eine Reihe von Clustern aus und schaltete diese Instanz irgendwann im Laufe des Tages aus, um zu beobachten, wie die verbleibenden Systeme reagierten. Offensichtlich schafft dies eine schmerzhafte Erfahrung für Engineering-Teams, die täglich genug Netzwerkkopfschmerzen zu bewältigen haben, aber am Ende des Tages versetzt es die Teams in eine bessere Position, um die Auswirkungen dieser Ausfälle nicht nur in Bezug auf ihr Netzwerk, sondern auch in Bezug auf die Auswirkungen auf die Benutzer zu verstehen.

Während es kontraintuitiv erscheinen mag, Ressourcen und Einzelpersonen für das „Brechen“ von Dingen zu verwenden, hilft die proaktive Durchführung dieser Chaostests, ein widerstandsfähigeres Netzwerk aufzubauen und eine bessere, zuverlässigere Benutzererfahrung zu schaffen. Die reale Welt funktioniert nicht in einer kontrollierten Testumgebung. Seit der Gründung von Chaos Monkey hat es mehrere Updates durchlaufen und ist zu einer beliebten Open-Source-Anwendung geworden. Und zu einer Zeit war es nur ein Teil einer Chaos-Engineering-Suite von Werkzeugen, die simianische Armee genannt wurde. Die Simian Army Suite wurde 2018 aufgelöst, enthielt aber die folgenden aufgabenspezifischen Chaos-Engineering-Dienstprogramme:

Chaos Kong

Chaos Kong wurde entwickelt, um zu simulieren, dass eine vollständige AWS-Region gelöscht oder gelöscht wird, um zu sehen, wie sich das System erholt und reagiert hat, indem datenverkehr ohne Leistungseinbußen in eine andere Region übertragen wurde. Auch dies geschieht selten, aber im Rahmen des Chaos Engineering ist nichts außerhalb der Grenzen.

Konformität Affe

Conformity Monkey ist ein Service, der in AWS ausgeführt wird, um Instances zu identifizieren, die nicht den vordefinierten Regeln entsprechen. Alle Instanzen, die nicht den Regeln entsprechen, die flexibel genug waren, um angepasst und so eingestellt zu werden, dass sie mit unterschiedlichen Häufigkeiten ausgeführt werden, wurden identifiziert und eine E-Mail-Benachrichtigung wird an den Eigentümer oder die Gruppe gesendet. Conformity Monkey wurde seitdem zu Spinnaker-Diensten verschoben.

Chaos Gorilla

Chaos Gorilla ist wie Chaos Monkey, aber in einem größeren Maßstab. Anstatt Fehler auf einzelnen AWS-Instances zu simulieren, simulierte Chaos Gorilla einen Ausfall einer gesamten AWS-Zone. Dieses Dienstprogramm wurde entwickelt, um zu zeigen, wie sich eine große Katastrophe auf Benutzer oder Kunden in einer anderen Region auswirkte, was perfekt für die Einrichtung der Infrastruktur und des Geschäftsmodells von Netflix war. Wenn die Cloud-Plattform diesem Test standhalten kann, indem sie ordnungsgemäß sicherstellt, dass Load Balancer angemessen reagieren und Dienste unterbrochen bleiben, kann sie allem standhalten, was auf sie geworfen wird.

Latenz-Affe

Latency Monkey wird, wie der Name schon sagt, verwendet, um Dienste gegen Netzwerkverzögerungen oder vollständige Fehler zu testen, um zu identifizieren, wie Dienste und ihre Abhängigkeiten auf diese simulierten Verzögerungen reagiert haben. Wie bei Webdiensten im Allgemeinen kann es jedoch unbekannte Konsequenzen innerhalb anderer Anwendungen geben, die auf den ersten Blick nicht leicht zu erkennen sind, weshalb ein Dienstprogramm wie Latency Monkey so wichtig ist, um die Fehlertoleranz über Dienste hinweg zu messen.

Doktor Affe

Das Dienstprogramm Doctor Monkey wurde verwendet, um Zustandsprüfungen über einzelne Instanzen hinweg durchzuführen und den Zustand (CPU-Auslastung, Speicher, Ressourcen usw.) des Gesamtsystems zu überwachen. Darüber hinaus kann Doctor Monkey über den Instanzstatus berichten und alle Instanzen aus dem Dienst entfernen, die es für das Gesamtsystem als ungeeignet erachtete.

10-18 Affe

Der Name für 10-18 Monkey kommt von den Abkürzungen für Lokalisierung und Internationalisierung und Lokalisierung, L10n und i18n. Die Zahlen stellen die Anzahl der Buchstaben zwischen dem ersten und dem letzten Buchstaben dar. Da Netflix-Kunden auf der ganzen Welt ansässig sind, war es von größter Bedeutung, eine Methode zur Überwachung der Zuverlässigkeit ihrer Streaming-Dienste in verschiedenen Regionen zu haben. Der Vorteil des Dienstprogramms 10-18 Monkey besteht darin, dass es in mehreren geografischen Regionen, die verschiedene Sprachen und Zeichensätze bedienen und verwenden, nach Konfigurations- und Leistungsproblemen suchen kann.

Hausmeister Affe

Was ist mit all den ungenutzten AWS-Ressourcen? Geben Sie Hausmeister Monkey ein. Der Zweck des Dienstprogramms Janitor Monkey besteht darin, ungenutzte Ressourcen zu finden und zu entfernen. Wie Chaos Monkey ist es auch anpassbar und erweiterbar genug, um mit anderen Cloud-Anbietern verwendet zu werden. Benutzer stellen eine Reihe von Regeln bereit, und Janitor Monkey macht sich an die Arbeit, identifiziert die nicht verwendeten Ressourcen, Gruppen und Volumes, die für die Bereinigung und Entfernung ins Kandidaten sind, und sendet eine Benachrichtigung. Im Laufe der Zeit wurde die Funktionalität durch einen neuen Dienst namens Swabbie ersetzt.

Fazit: Chaos Engineering – Prinzipien, Beispiele & Tools

Im Laufe der Zeit hat sich Chaos Engineering zu einer eigenen vollwertigen Branche entwickelt. Es gibt jetzt eine Vielzahl von Open-Source- und kommerziellen Tools wie Litmus Chaos, Gremlin, Chaos Mesh und viele mehr, die Organisationen nutzen können. Der Aufbau widerstandsfähiger Systeme ist nicht nur für Technologieunternehmen geeignet. Verteilte Systeme sind komplexer geworden, was bedeutet, dass Ausfälle schwieriger vorherzusagen sind. Aufgrund verschiedener regulatorischer und Compliance-Probleme müssen Banken, Regierungsstellen, Pharmaunternehmen, Bildungseinrichtungen usw. ihre Systeme und Dienstleistungen regelmäßig testen, um sicherzustellen, dass sie die geschäfts- und geschäftskritischen Anforderungen erfüllen. Leistungstests und Chaostests sind proaktive Ansätze, um zu lernen, wie man belastbare Systeme durch die Beobachtung von Fehlern aufbaut.