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 einen
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
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
Unsere Ideen
Weitere Blogs
Contact




