Cykl życia zdarzeń: ponawianie prób, DLQ i miejsca docelowe

Serverless Applications with AWS Lambda

Claudio Canales

Senior DevOps Engineer

Cykl życia zdarzenia — skrót

  • Lambda wywołuje twój handler.
  • Handler albo kończy się sukcesem, albo błędem.
  • W przypadku błędu o tym, co dalej, decydują ponawianie prób i routing.

Przepływ cyklu życia zdarzenia

Serverless Applications with AWS Lambda

Dwa sposoby obsługi błędów

Synchroniczne

  • Wywołujący czeka i otrzymuje odpowiedź z błędem.

Asynchroniczne

  • Wywołujący dostaje najpierw potwierdzenie.
  • Lambda ponawia próbę w tle.
  • Obsługa błędów zależy od trybu wywołania.

Ścieżki błędów: synchroniczna vs asynchroniczna

Serverless Applications with AWS Lambda

Ponawianie prób to norma

  • Ponawianie prób to często zaleta, nie wada.
  • Błąd przejściowy może ustąpić przy następnej próbie.
  • Ponawianie może powodować wielokrotne przetwarzanie — handler musi to uwzględniać.

Analogia: ponowne wybieranie numeru

Serverless Applications with AWS Lambda

Ponawianie prób w czasie

  • Ponawianie prób pozwala wyjść z przejściowych problemów.
  • Jednak to samo zdarzenie może zostać wykonane wielokrotnie.
  • Kluczowe są idempotentność i czytelna obsługa błędów.

Oś czasu prób ponowienia

Serverless Applications with AWS Lambda

Kiedy ponawianie jest niebezpieczne

  • Ponawianie bywa ryzykowne, gdy operacja nie jest idempotentna.
  • Przykłady: obciążenie karty, wysłanie e-maila.
  • Używaj kluczy idempotentności i bezpiecznych aktualizacji, by duplikaty nie wyrządzały szkód.

Diagram idempotentności

Serverless Applications with AWS Lambda

DLQ (Dead-Letter Queue)

  • Bezpieczne miejsce dla zdarzeń, które wciąż kończą się błędem po ponowieniu.
  • Najczęściej kolejka SQS — zarządzana kolejka wiadomości AWS.
  • Sprawdź payload, napraw problem i wyślij zdarzenie ponownie.

Analogia: biuro rzeczy znalezionych dla DLQ

Serverless Applications with AWS Lambda

DLQ vs destinations

Analogia: biuro rzeczy znalezionych dla DLQ

  • Przechwytuje zdarzenia zakończone błędem po ponowieniu.
  • Służy do analizy przyczyn błędów.

Diagram routingu miejsc docelowych

  • Kierują wyniki w zależności od sukcesu lub błędu.
  • Pozwalają zdefiniować jawne ścieżki sukcesu i błędu.
Serverless Applications with AWS Lambda

Destinations: ścieżki sukcesu i błędu

  • Po sukcesie wynik trafia do onSuccess.
  • Po błędzie szczegóły trafiają do onFailure.
  • Dzięki temu następny krok jest jawnie określony.

Diagram routingu miejsc docelowych

Serverless Applications with AWS Lambda

Konfiguracja polityki ponawiania

  • Dostosuj liczbę prób ponowienia przez Lambda.
  • Ogranicz wiek zdarzenia, by unikać przetwarzania przestarzałych danych.
  • Więcej prób zwiększa niezawodność, ale też liczbę duplikatów i opóźnienia.

Ustawienia polityki ponawiania

Serverless Applications with AWS Lambda

Maksymalny wiek zdarzenia: data ważności

  • Maksymalny wiek zdarzenia to polityka wygasania.
  • Jeśli zdarzenie jest zbyt stare, jego przetwarzanie może nie mieć sensu.
  • Kompromis: mniej spóźnionych zdarzeń, bardziej terminowe działanie.

Analogia: wygasanie zdarzenia

Serverless Applications with AWS Lambda

Obserwowalność: gdzie szukać?

  • Logi odpowiadają na pytanie: co się stało?
  • Metryki — jak często to się dzieje?
  • Alarmy pomagają szybko wykryć skoki.

Logi vs metryki

Serverless Applications with AWS Lambda

Co robić z błędnymi zdarzeniami

  • Sprawdź payload i błąd.
  • Usuń przyczynę problemu.
  • Wyślij zdarzenie ponownie, a następnie monitoruj błędy i przepustowość.

Cykl odzyskiwania po błędach zdarzeń

Serverless Applications with AWS Lambda

Najważniejsze wnioski

  • Niezawodność zapewniają ponawianie prób, routing i obserwowalność.
  • Błędy synchroniczne trafiają do wywołującego.
  • Błędy asynchroniczne wymagają ponawiania oraz DLQ lub destinations.
  • Dzięki temu błędy pozostają widoczne.

Diagram niezawodności

Serverless Applications with AWS Lambda

Czas na praktykę!

Serverless Applications with AWS Lambda

Preparing Video For Download...