Fehlertolerante und resiliente Anwendungen auf AWS entwerfen

Anwendungen auf AWS entwickeln

Ricardo Sueiras

Principal Technologist

Für Resilienz bauen

für Resilienz bauen

Anwendungen auf AWS entwickeln

alles wird ausfallen

Anwendungen auf AWS entwickeln

Temporäre Ausfälle

 

temporäre Ausfälle

  • Verstehe die häufigen Fehlermodi:
  • Temporäre Fehler verschwinden von selbst, erneutes Versuchen ist meist sicher.
Anwendungen auf AWS entwickeln

Timeouts

 

timeouts

  • Verstehe die häufigen Fehlermodi:
  • Temporäre Fehler verschwinden von selbst, erneutes Versuchen ist meist sicher.
  • Timeouts: externer Dienst braucht zu lange für die Antwort.
Anwendungen auf AWS entwickeln

Permanente Fehler

 

permanente Fehler

  • Verstehe die häufigen Fehlermodi:
  • Temporäre Fehler verschwinden von selbst, erneutes Versuchen ist meist sicher.
  • Timeouts: externer Dienst braucht zu lange für die Antwort.
  • Permanente Fehler: Anfrage ist grundsätzlich fehlerhaft, erneutes Versuchen hilft nicht.
Anwendungen auf AWS entwickeln

API-Limits

 

API-Limits

  • Verstehe die häufigen Fehlermodi:
  • Temporäre Fehler verschwinden von selbst, erneutes Versuchen ist meist sicher.
  • Timeouts: externer Dienst braucht zu lange für die Antwort.
  • Permanente Fehler: Anfrage ist grundsätzlich fehlerhaft, erneutes Versuchen hilft nicht.
  • API-Rate-Limits: zu viele Anfragen, erwarte HTTP 429 Too Many Requests.
Anwendungen auf AWS entwickeln

Retry-Strategien

  • Ausfälle in verteilten Systemen sind oft temporär.
  • Eine wiederholte Anfrage klappt oft.
  • Füge Retry-Logik mit Bedacht hinzu, blinde Retries können es verschlimmern.
  • Exponentielles Backoff: Verzögerung zwischen Retries erhöhen.
  • Jitter: Zufall hinzufügen, um Retry-Spitzen zu vermeiden.
  • Retry-Limits: Endlosschleifen verhindern.

 

Retry-Strategien

Anwendungen auf AWS entwickeln

AWS SDK: native Funktionen

  • AWS SDKs übernehmen die Retry-Logik automatisch.
  • Eingebaute Retries enthalten exponentielles Backoff und Jitter.
  • Fehlgeschlagene oder gedrosselte Anfragen werden mit zunehmenden Pausen erneut gesendet.
  • Reduziert den Fehlerbehandlungscode, den du schreiben musst.

 

SDK-Funktionen

Anwendungen auf AWS entwickeln

Retry-Logik steuern

 

nicht erneut versuchen

  • Retry-Logik ist nicht immer die Lösung.
  • HTTP-4xx-Fehler: Server hat verstanden und deine Anfrage abgelehnt.
  • Nicht idempotente Anfragen: erneutes Senden kann Duplikate oder Inkonsistenzen verursachen.
Anwendungen auf AWS entwickeln

Timeouts verwalten

 

Timeouts verwalten

  • Unbegrenzte Retries können unter Last Probleme verstärken.
  • Kombiniere Retries mit Timeouts.
  • Ein Timeout setzt die maximale Wartezeit auf eine Antwort.
  • Jeder externe Service-Call sollte ein Timeout haben.
Anwendungen auf AWS entwickeln

Circuit Breaker

  • Wenn ein Dienst ständig fehlschlägt, reichen Retries nicht.
  • Weiter Anfragen zu senden kann den fehlerhaften Dienst überlasten.
  • Das Circuit-Breaker-Muster stoppt Anfragen an eine ungesunde Abhängigkeit vorübergehend.
  • Geschlossener Zustand: Anfragen fließen normal.

 

Circuit Breaker

Anwendungen auf AWS entwickeln

Circuit Breaker

  • Überschreiten Ausfälle einen Schwellwert, öffnet der Circuit.
  • Nachfolgende Anfragen werden blockiert.

 

Circuit Breaker

Anwendungen auf AWS entwickeln

Circuit Breaker

  • Nach einer Abkühlphase geht der Circuit halb offen, um die Erholung zu testen.
  • Dienst antwortet erfolgreich: Normalbetrieb läuft weiter.
  • Weiterhin Fehler: Circuit bleibt offen.
  • Implementiere Circuit Breaker auf Anwendungsebene.

 

Circuit Breaker

Anwendungen auf AWS entwickeln

Dead Letter Queues

 

DLQ

  • Nachrichten, die ständig fehlschlagen, können das System blockieren.
  • Verschiebe sie aus dem Hauptverarbeitungsfluss.
  • Fehlgeschlagene Nachrichten landen in einer Dead Letter Queue.
  • Wichtiger Baustein für resiliente Anwendungen.
  • Verstehe jedoch die Trade-offs
Anwendungen auf AWS entwickeln

AWS API-Limits

 

API-Limits

  • Du interagierst über APIs mit AWS-Services.
  • Jeder Service definiert eigene API-Rate-Limits.
  • Überschreitungen führen zu Drosselung (HTTP 429 Too Many Requests).
  • Entwirf deine Anwendung so, dass sie Drosselung sauber verarbeitet.
Anwendungen auf AWS entwickeln

Integration mit Drittanbieter-Diensten

  • Drittanbieter-Dienste bringen Unsicherheit.
  • Du hast keine Kontrolle über deren Leistung oder Verfügbarkeit.
  • Setze Timeouts, um lange Wartezeiten zu vermeiden.
  • Nutze Retries mit Backoff bei temporären Problemen.
  • Isoliere Abhängigkeiten, um den Einschlagradius zu begrenzen.

 

Drittanbieter

Anwendungen auf AWS entwickeln

Integration mit Drittanbietern

  • Denke über den Wechsel von synchroner zu asynchroner Kommunikation nach.
  • Dein System verarbeitet weiter, auch wenn der externe Dienst verzögert ist.

 

Drittanbieter steuern

Anwendungen auf AWS entwickeln

Lass uns üben!

Anwendungen auf AWS entwickeln

Preparing Video For Download...