Opsio - Cloud and AI Solutions
3 min read· 620 words

Cloud-Annahme

Veröffentlicht: ·Aktualisiert: ·Geprüft vom Opsio-Ingenieurteam
Jacob Stålbro

Die Erstellung moderner Anwendungen mit Serverless-Technologie und Managed Services bedeutet, dass jeder verteilte und hochverfügbare Systeme erstellen kann, ohne sich um die zugrunde liegende Infrastruktur kümmern zu müssen. Aber es geht nicht nur um Spaß und Spiel. Dieser Vortrag mit dem Titel „Performing chaos engineering in a serverless world", den ich auf der AWS re:Invent 2019 gehalten habe, erläutert einige der Herausforderungen von Serverless, häufige Schwachstellen in Serverless-Anwendungen sowie Herausforderungen bei der Verwendung von Chaos Engineering in Serverless. Bitte sehen Sie sich das Video an.

Versagen in unsere Funktionen einbauen

  • AWS Serverless Hero Yan Cui hat mehrere Artikel über Latenz-Injektion für AWS Lambda geschrieben, siehe "Wie können wir die Prinzipien des Chaos Engineering auf AWS Lambda anwenden?" (https://theburningmonk.com/2017/10/how-can-we-apply-the-principles-of-chaos-engineering-to-aws-lambda/) und "Applying principles of chaos engineering to AWS Lambda with latency injection" (https://hackernoon.com/chaos-engineering-and-aws-lambda-latency-injection-ddeb4ff8d983) vom Oktober 2017. In diesen Artikeln wird erklärt, warum wir Chaos Engineering in unseren serverlosen Anwendungen einsetzen können und sollten, und es werden Beispiele gezeigt, wie wir es tun können.
  • Adrian Hornsby, AWS Principal Developer Advocate Architecture, hat dies weiter ausgebaut, indem er zunächst eine Lambda-Schicht und später eine Python-Bibliothek für die Fehlerinjektion, chaos_lambda (https://github.com/adhorn/aws-lambda-chaos-injection), erstellt hat, die Entwicklern einen einfacheren Einstieg in Chaos-Experimente für AWS Lambda ermöglicht. Installieren Sie einfach die Bibliothek, umhüllen Sie Ihre Funktionen mit dem entsprechenden Fehlermodus und schon können Sie mit der Fehlerinjektion beginnen!
  • Um das gleiche Maß an Einfachheit für NodeJS-Entwickler zu erreichen, habe ich Ende letzten Jahres ein NPM-Paket namens failure-lambda (https://github.com/gunnargrosch/failure-lambda) erstellt. Das Ziel von failure-lambda ist, kurz gesagt, eine einfache Möglichkeit zur Fehlerinjektion in AWS Lambda unter Verwendung mehrerer verschiedener Fehlermodi. Um es noch einfacher zu machen, habe ich beschlossen, einen einzigen Wrapper zu verwenden und stattdessen den Fehlermodus auswählbar zu machen. Auf diese Weise müssen Sie keine Änderungen am Code vornehmen, wenn Sie z.B. zwischen Latenz oder Exception Injection wechseln möchten, sondern Sie ändern einfach eine Einstellung.
  • Wie wir wissen, geht es bei Serverless nicht nur um AWS und beim Chaos-Engineering für Serverless geht es nicht nur um AWS Lambda. Aus diesem Grund gibt es jetzt auch die gleichen Optionen für NodeJS-Entwickler, die Serverless mit Azure Functions und Cloud Functions erstellen. Dies mit den NPM-Paketen failure-azurefunctions (https://github.com/gunnargrosch/failure-azurefunctions) und failure-cloudfunctions (https://github.com/gunnargrosch/failure-cloudfunctions).

Ausfallarten und Ausfallrate

Auch wenn alles mit der Latenz-Injektion in den Artikeln von Yan Cui begann, ist die Latenz bei weitem nicht der einzige mögliche Fehler, den wir in unseren serverlosen Anwendungen haben können. In failure-lambda, failure-azurefunctions und failure-cloudfunctions stehen jetzt fünf verschiedene Fehlermodi zur Auswahl:

Schwachstellen identifizieren

Fügt der ausgeführten Funktion eine Latenz hinzu, die über eine minimale und maximale Spanne von Millisekunden gesteuert wird. Damit können Sie zum Beispiel die Latenzzeit eines Dienstes simulieren oder Ihre Timeout-Werte testen und festlegen.

Ausnahme

Wirft eine Ausnahme in der Funktion. Hilft Ihnen zu testen, wie Ihre Anwendung und Ihr Code mit Ausnahmen umgehen.

Statuscode

Ihre Funktion gibt einen Statuscode Ihrer Wahl zurück, z.B. 502 oder 404 anstelle des normalen 200. Dies gibt Ihnen die Möglichkeit zu testen, was bei Fehlern passiert.

Speicherplatz

Füllt Ihren temporären Datenträger mit Dateien, um einen Fehler zu erzeugen. Wenn Sie eine Festplatte zum Speichern temporärer Dateien verwenden, können Sie testen, wie sich Ihre Anwendung verhält, wenn diese Festplatte voll ist oder Sie nicht mehr darauf speichern können.

Schwarze Liste (mit freundlicher Genehmigung von Jason Barto)

Blockiert Verbindungen zu bestimmten Hosts. Verwenden Sie diese Funktion, um die Nichtverfügbarkeit von Diensten oder Dritten zu simulieren.

Alle diese Ausfallmodi können zusammen mit einer von Ihnen festgelegten Ausfallrate verwendet werden. Die Standardeinstellung ist, bei jedem Aufruf einen Fehler einzubauen, aber in der Realität ist es wahrscheinlich, dass z.B. ein Dritter bei 50% der Aufrufe dieses Hosts nicht verfügbar ist oder dass bei einem Viertel der Aufrufe eine Ausnahme ausgelöst wird. Mit der Einstellung der Rate können Sie dies erreichen.

Über den Autor

Jacob Stålbro
Jacob Stålbro

Head of Innovation at Opsio

Digital Transformation, AI, IoT, Machine Learning, and Cloud Technologies. Nearly 15 years driving innovation

Editorial standards: This article was written by a certified practitioner and peer-reviewed by our engineering team. We update content quarterly to ensure technical accuracy. Opsio maintains editorial independence — we recommend solutions based on technical merit, not commercial relationships.

Möchten Sie das Gelesene umsetzen?

Unsere Architekten helfen Ihnen, diese Erkenntnisse in die Praxis umzusetzen.