Blog

Lambda-Schutzschalter

Dennis Vriend

Aktualisiert Oktober 21, 2025
2 Minuten

Das Circuit Breaker Pattern (CBP) ist ein Muster, bei dem ein Funktionsaufruf von einem Circuit Breaker (CB) Objekt umschlossen wird. Wenn der Funktionsaufruf einen Fehler erzeugt, wird der CB ausgelöst und die Verbindung ist offen, was bedeutet, dass der CB einen Fehler auslöst und somit schnell ausfällt. Nach einiger Zeit wird der CB geschlossen und die Funktion wird aufgerufen. Wenn die Funktion einen Fehler erzeugt, startet der CB-Prozess erneut.

Schotts

Wenn Sie eine Lösung in AWS entwerfen, ist es üblich, Bulkheads in den Entwurf aufzunehmen. Bulkheads isolieren Ausfälle in Systemen und verhindern Kaskadenausfälle. Die Einführung von CB in den Entwurf schafft Abschottungen.

Lambda und Stromkreisunterbrecher

AWS Lambda bietet nicht die Möglichkeit, Stromkreisunterbrecher zu verwenden. Glücklicherweise gibt es Implementierungen von Stromkreisunterbrechern, die mit Lambda verpackt werden können, so dass Lambda selbst der Stromkreisunterbrecher sein kann.

Python Stromkreisunterbrecher

Das Open-Source-Projekt fabfuel/circuitbreaker von Fabian Fuelling ist eine CBP-Implementierung für Python 2 und 3. Die Bibliothek bietet ein konfigurierbares CB, das sehr einfach zu verwenden und zu bestehenden Codebasen hinzuzufügen ist. Die Bibliothek bietet den code>@circuit decorator, der verwendet werden kann, um bestehende Funktionen zu dekorieren.

@circuit(failure_threshold=2)
def send_request(url: str, user: str, pwd: str, req=None) -> (int, dict):
    resp = requests.get(url, auth=HTTPBasicAuth(user, pwd), verify=False, timeout=2)
    body = resp.json()
    code = resp.status_code
    if code == 500:
        raise ValueError('Service returned 500')
    return code, body

Beispiel

Das Beispiel-Repository zeigt, wie Sie ein Lambda erstellen und aufbauen. Das Lambda ruft http://httpbin.org/status/500 auf, das einen HTTP 500 Statuscode zurückgibt. Das Lambda löst dann einenValueError aus und die CB stürzt nach zwei Ausnahmen ab. Die CB setzt sich nach 30 Sekunden zurück und versucht erneut, den Dienst aufzurufen.

Anhand des Beispiels

Ich gehe davon aus, dass Sie einen Mac haben, auf dem Python, pipenv, sceptre und docker installiert sind. Um das Beispiel auszuführen, geben Sie ein.Um die URL des Api-Gateways zu erhalten, geben Sie ein. Um das Beispiel zu entfernen, geben Sie ein.Nach zwei Aufrufen wird der CB ausgelöst. Der nächste Aufruf wird schnell fehlschlagen.

Fazit

Es ist ganz einfach, dem Lösungsentwurf Trennwände hinzuzufügen, indem Sie Funktionen, die Subsysteme aufrufen, mit einer CB umhüllen. Wenn das Subsystem ausfällt, fungiert die CB als Trennwand und isoliert das Subsystem.

Verfasst von

Dennis Vriend

Contact

Let’s discuss how we can support your journey.