Director, Intelligent Automation
IT-Organisationen haben einen massiven Wandel in Bezug auf Mitarbeiter, Prozesse und Technologie vollzogen, um den geschäftlichen Anforderungen gerecht zu werden und beispielsweise eine schnellere Markteinführung zu erreichen. Die Mitarbeiter wurden auf Full Stack umgeschult, die Prozesse wurden von der Wasserfallmethode auf iterative und agile Methoden umgestellt, die Teams wurden linear und DevOps-Praktiken wurden auf die Automatisierung der Softwareentwicklung und -bereitstellung angewendet. Obwohl die monolithische Architektur unabhängig von Erweiterungen oder neuen Funktionen eine logische Modularität ermöglicht, wird sie dennoch als eine Einheit eingesetzt, was die kontinuierliche Bereitstellung mühsam und zeitaufwändig macht. Um diese Herausforderung zu lösen, sind Unternehmen von einer monolithischen Architektur zu einer serviceorientierten Architektur und in den meisten Fällen zu Microservices übergegangen. Der Wechsel zu Microservices hat den Teams geholfen, Anwendungen effizienter, schneller und häufiger zu entwickeln, zu testen und bereitzustellen. Darüber hinaus hat die Einführung von Microservices wichtige Leistungsindikatoren (KPIs) wie die Bereitstellungshäufigkeit und die Vorlaufzeit für Änderungen erheblich verbessert, was dazu beiträgt, dass Funktionen in kürzerer Zeit auf den Markt kommen und das Geschäft fördern.
IT-Unternehmen, die Microservices eingeführt haben, haben enorme Vorteile gesehen. Allerdings bleiben Herausforderungen bei der Bewältigung der betrieblichen und technischen Komplexität bestehen. Eine Zunahme der Anzahl und gegenseitigen Abhängigkeiten von Microservices kann auch die Anzahl der Ausfallpunkte erhöhen, die sich dann auf die folgenden Metriken auswirken:
Diese Metriken messen die Verfügbarkeit von Systemen und werden von den Teams für Systemzuverlässigkeit und Entwicklung verwendet, um Verträge mit Service Level Agreements (SLAs) zu unterstützen. Höhere Systemwiederherstellungszeiten/MTTR und häufige Ausfälle im System/MTBF können sich auf die Systemverfügbarkeit und -zuverlässigkeit auswirken und somit die SLA/SLO (Service Level Agreement/Service Level Objective) Verpflichtungen in den Verträgen erheblich beeinträchtigen.
Das Chaos-Engineering umfasst eine Reihe von Praxisexperimenten, die mit den Systemen durchgeführt werden, um ihre Fähigkeit, turbulenten Bedingungen in der Produktion standzuhalten, zu überprüfen und das Vertrauen in sie zu stärken.Laut einem Bericht von Gremlin1 aus dem Jahr 2021 hatten 23 % der Teams, die häufig Chaos-Engineering-Projekte durchführten, eine MTTR von weniger als einer Stunde; 60 % hatten eine MTTR von weniger als 12 Stunden.Aus diesem Grund ermöglicht die frühe und häufige Durchführung von Chaosexperimenten im Softwareentwicklungs-Lebenszyklus (SDLC) Folgendes:
Viele Spitzenunternehmen haben heute die Gewissheit, dass sie durch die Implementierung von Chaos-Experimenten als Teil ihres SDLC über eine beispiellose Verfügbarkeit und Zuverlässigkeit verfügen. Daher bedeutet die Verbesserung von MTBF und MTTR eine hohe Systemverfügbarkeit, ohne von den zugesagten SLAs/SLOs abzuweichen.
Unternehmen können Chaos-Engineering mit Hilfe einer sechsstufigen Strategie einführen, die in der folgenden Grafik dargestellt ist:
Abbildung 1: Sechs-Schritte-Strategie zur Einführung von Chaos Engineering in einem Unternehmen.
Lassen Sie uns näher auf die sechs oben genannten Schritte eingehen. Wir verwenden dazu eine Microservices-basierte Beispielanwendung für Kinobuchungen. Sie wird in einem Kubernetes-Cluster bei einem öffentlichen Cloud-Anbieter eingesetzt, wie in Abbildung 2 unten dargestellt.
Verschiedene Dienste, wie Sendezeiten, Filmbewertungen, Ticketkauf, Zahlung, E-Mail und SMS, werden in einzelnen Behältern bereitgestellt, jeder verpackt in einem separaten Pod. Die Front-End-Benutzeroberfläche und die Datenbank laufen ebenfalls auf den Pods.
Abbildung 2: Bereitstellung einer Kinobuchungsanwendung auf einem Kubernetes-Cluster bei einem Public-Cloud-Anbieter.
Schritt 1: Entdeckung
Während dieser Phase müssen die Teams zusammenarbeiten, um die erforderlichen Informationen über eine Anwendung und ihre Umgebung zu erhalten, indem sie:
Abbildung 3: Darstellung der Dienste einer Kinobuchungsanwendung und ihrer Abhängigkeiten.
Schritt 2: „Steady State“ definieren
In dieser Phase sollten die Teams:
In der Beispielanwendung für Kinobuchungen (Abbildung 2) ist der Service – Film buchen – eine geschäftskritische Komponente, da er mit der Umsatzgenerierung verbunden ist. In der Regel wird diese Komponente in den ersten Tagen nach dem Kinostart massiv gleichzeitig aufgerufen. Daher wird der Durchsatz (die Fähigkeit, diese Anfragen ohne Beeinträchtigung zu bearbeiten) zur wichtigsten Kennzahl, und das Produktmanagementteam definiert den akzeptablen Durchsatz für den Service für Filmbuchungen als einen Wert zwischen 50 und 65 Anfragen pro Sekunde.
Schritt 3: Eine Hypothese aufstellen
Sobald der Steady-State für die Services definiert ist, bestimmen Sie die Experimente, die injiziert werden sollen, und stellen Hypothesen darüber auf, was schief gehen könnte (z. B. was könnte sich auf den Service, das System und die Kunden auswirken?). Setzen Sie außerdem Prioritäten bei den Experimenten auf der Grundlage der Auswirkungen auf die Kunden und der Häufigkeit des Eintretens.
Beenden wir den Pod, der den Buchfilmservice in der Beispielanwendung ausführt. Wir gehen davon aus, dass Kubernetes die Beendigung automatisch erkennen und einen neuen Pod bereitstellen wird.
Schritt 4: Das Experiment durchführen und die Ergebnisse messen und analysieren
Fangen Sie an, Experimente in einer Nicht-Produktionsumgebung durchzuführen. Es ist jedoch wichtig zu verstehen, wie sich das System verhält, bevor Sie das Experiment durchführen. Messen Sie die erforderlichen Metriken unter normalen Bedingungen und messen Sie dann dieselben Metriken nach der Durchführung von Experimenten. Wenn es nach der Durchführung des Experiments zu schwerwiegenden Auswirkungen kommt, brechen Sie das Experiment ab und führen den Rollback-Plan aus, um zu einem stabilen Zustand zurückzukehren.
Abbildung 4: Eine schematische Darstellung des gesamten Experiments, wie unten definiert.
Schritte unten, um ein POD-Kill-Experiment für Buchfilme durchzuführen:
Der Durchsatz vor dem Experiment liegt im definierten Bereich von 50 bis 65, und es treten keine Fehler auf.
Abbildung 6: Die Ergebnisse der Latenzzeit vor dem Experiment liegen im erwarteten Bereich.
Abbildung 7: Durchsatz und Fehler nach dem Ausführen des Experiments (z. B. nach dem Beenden des Film-buchen-Pods).
Abbildung 8: Latenz nach dem Ausführen des Experiments (z. B. nach dem Beenden des Film-buchen-Pods).
Die Daten zeigen, dass, wenn der Film-buchen-Pod beendet wird, die Fehlerrate und die Latenz über dem normalen Bereich liegen. Der Durchsatz sinkt, bis Kubernetes die Beendigung erkennt und automatisch einen Pod hochfährt, der den Film-buchen-Dienst enthält. Dieser Fehler muss behoben werden.
Schritt 5: Reparieren und erneut testen
In diesem Fall besteht eine der möglichen Korrekturen darin, die Anzahl der Replikate zu skalieren. Dadurch wird sichergestellt, dass eine bestimmte Anzahl von Pods kontinuierlich läuft. Selbst wenn ein Pod ausfällt, werden die anderen Pods die Anfrage bearbeiten. Beachten Sie, dass nach der Korrektur in der Abbildung unten keine Fehler mehr auftreten. Durchsatz und Latenz sind wie erwartet und liegen deutlich innerhalb des Bereichs.
Abbildung 9: Nachkorrektur, es gibt keine Fehler beim Durchsatz.
Abbildung 10: Nach dem Update liegt die Latenz im akzeptablen Bereich.
Mit der Implementierung von Microservice-resilienten Entwurfsmustern können auch Störungen in der Anwendung behoben werden. Entwickler können ausfallsichere Microservices-Anwendungen erstellen, indem sie Resilience-Muster wie Circuit Breaker, Retry und Timeout verwenden.
Schritt 6: Erhöhen Sie den Aktionsradius iterativ
Sobald das Experiment erfolgreich läuft, wird empfohlen, den Radius des Experiments schrittweise zu vergrößern. In dem obigen Beispiel-Experiment beenden wir zum Beispiel einen Dienst und dann nach und nach einen anderen. Daher müssen Sie zunächst in Staging-Umgebungen experimentieren und dann zur Produktion übergehen.
Um die Zufriedenheit und Bindung der Benutzer in der digitalen Welt zu gewährleisten, müssen Unternehmen bestimmte Faktoren berücksichtigen (Markteinführungszeit, Benutzererfahrung, zuverlässiges System und die Fähigkeit zur schnellen Wiederherstellung), um den Betrieb zu gewährleisten und den Endbenutzern einen Mehrwert zu bieten. Die Einbeziehung von Chaos-Engineering in den SDLC bringt sowohl betriebliche als auch technische Vorteile mit sich, wie z.B. die Vermeidung von Umsatzeinbußen, geringere Wartungskosten, ein verbessertes Störungsmanagement, eine geringere Anzahl negativer Störungen, eine Entlastung des Bereitschaftspersonals sowie ein besseres Verständnis der Systemausfallarten und ein verbessertes Systemdesign.
Aufgrund der zahlreichen Vorteile sollten Unternehmen auf Chaos-Engineering setzen, um die Erstellung zuverlässiger Softwaresysteme zu erleichtern.
Referenzen:
Director, Intelligent Automation
Sathyapriya Bhaskar verfügt über mehr als 18 Jahre Erfahrung in Quality Engineering & DevOps. Sie ist praktizierende Lösungsarchitektin und hilft Kunden beim Entwerfen und Implementieren von SDLC-Automatisierungslösungen. Sie ist auch zertifizierte Chaos Engineering Praktikerin und Expertin.
Abonnieren Sie den Newsletter, um über die neuesten Entwicklungen in der Branche auf dem Laufenden zu bleiben, einschließlich Einblicke in die Branche und innovative Lösungsmöglichkeiten.