Obsługa błędów w automatyzacjach: retry, dead-letter, alerty i „plan B”

Praktyczne zasady, które pozwolą uniknąć awarii dotykających klientów i pieniędzy

Najważniejsze wnioski

  • Werdykt: konkretnie — retry plus DLQ plus alarmy.
  • Dla kogo: systemy z pieniędzmi/klientami lub długimi procesami.
  • Start: ustaw retry + DLQ + alarm na pierwszym tygodniu produkcji.

Werdykt w skrócie — kto ma się tym przejmować

Jeśli Twoja automatyzacja dotyka pieniędzy, zamówień lub doświadczenia klienta, nie zostawiaj błędów bez monitoringu. Retry sam w sobie nie wystarczy — potrzebujesz też dead-letter queue (DLQ) i alarmów, żeby szybko reagować.

(Założenia i wytyczne techniczne poniżej; najważniejsze źródło implementacyjne: AWS SQS Dead-Letter Queues). ([docs.aws.amazon.com)

Kilka pytań, szybkie decyzje

  • Czy operacja jest idempotentna (można powtarzać bez skutków ubocznych)? — Jeśli nie, nie retryuj bez dodatkowego zabezpieczenia.

  • Czy błąd jest prawdopodobnie przejściowy (timeout, przeciążenie)? — Retry z back-offem. ([learn.microsoft.com)

  • Czy musisz wiedzieć o każdym niedostarczonym zadaniu? — Tak: DLQ + alarmy. ([docs.aws.amazon.com)

Czym jest każdy element (krótko)

  • Retry — ponowne próby wykonania operacji po błędzie; strategia określa liczbę prób i odstępy (np. exponential back-off). W praktyce oznacza to: krótkie retry dla UX, dłuższe i mniej agresywne dla batchy. ([learn.microsoft.com)

  • Dead-letter queue (DLQ) — kolejka dla wiadomości/zadań, które przekroczyły maksymalną liczbę prób; służy do diagnostyki i ręcznego odzysku. W praktyce DLQ zapobiega „poison pill” i ułatwia alarmowanie. ([docs.aws.amazon.com)

  • Alerty — powiadomienia (e-mail, Slack, PagerDuty) po wykryciu problemu, np. gdy DLQ ma wiadomości lub metryki rosną. W praktyce ustaw alarm na progu >0 lub na bazie historycznego baseline. ([docs.aws.amazon.com)

Jak zacząć — szybka ścieżka (5–60 minut)

  1. Zidentyfikuj operacje krytyczne (płatności, powiadomienia, SLA).

  2. Dla każdej operacji zapisz: czy jest idempotentna? ile prób jest bezpiecznych?

  3. Wdróż retry z ograniczeniem liczby prób i exponential back-off. ([learn.microsoft.com)

  4. Skonfiguruj DLQ (redrive policy / maxReceiveCount). ([docs.aws.amazon.com)

  5. Dodaj alarm (np. CloudWatch) na metrykę liczby widocznych wiadomości w DLQ. ([docs.aws.amazon.com)

Obsługa wyjątków i testy

Testuj retry i DLQ przez wstrzykiwanie błędów (fault injection) oraz przez symulacje przeciążenia — sprawdź, czy alarmy faktycznie przychodzą. Jeśli nie masz możliwości testów, sprawdź logi i metryki po wdrożeniu i obniż agresywność retry. ([learn.microsoft.com)

Szczegóły: retry — fakty, skutki, decyzja

Fakt: Nadmierna liczba prób może przeciążyć serwis docelowy i powodować kaskadowe błędy. ([learn.microsoft.com)
Skutek: W praktyce zbyt agresywny retry zwiększa latency i koszty (otwarte połączenia, timeouty).
Werdykt: Ustaw finite retry + exponential back-off + randomizację; nie retryuj operacji nie-idempotentnych bez kompensacji.

Szczegóły: dead-letter — fakty, skutki, decyzja

Fakt: DLQ zbiera wiadomości, które przekroczyły maxReceiveCount; to jedyne miejsce, gdzie bezpiecznie trzymasz „nieprzetworzone” przypadki do analizy. ([docs.aws.amazon.com)
Skutek: Dzięki DLQ nie fałszujesz metryk kolejki i możesz ręcznie odtworzyć lub naprawić wiadomości.
Werdykt: DLQ to obowiązek, jeśli zadania są krytyczne lub trudne do odtworzenia.

Alerty i monitoring — fakty, skutki, decyzja

Fakt: CloudWatch (i podobne) wystawiają metrykę ApproximateNumberOfMessagesVisible dla DLQ; na jej podstawie skonfigurujesz alarm. ([docs.aws.amazon.com)
Skutek: Alarm na >0 zmusi zespół do reakcji na pojedynczy „poison pill”; alarm na wzrost progu może wskazywać regresję.
Werdykt: Alarmy są niezbędne — wybierz progi z głową (baseline) i kanał eskalacji.

Tabela: szybkie porównanie i mini-werdykt

MechanizmCo robiWerdykt
RetryPróbuje operację ponownie z określoną strategiąZalecane, jeśli idempotentne i przejściowe błędy.
Dead-letter (DLQ)Zbiera nieprzetworzone wiadomości po przekroczeniu limituObowiązkowe dla krytycznych procesów.
AlertyPowiadamia zespół o problemie (DLQ/metryki)Nieuniknione — bez nich problem zalega.

Typowe skargi po wdrożeniu i jak je rozwiązać

  • „Wszystko trafia do DLQ i nikt nie reaguje” — problem: brak odpowiednich alarmów/eskalacji. Naprawa: ustaw proste powiadomienie na Slack/PD z runbookiem. ([docs.aws.amazon.com)

  • „Retry powoduje przeciążenie API” — problem: zbyt krótkie interwały/za dużo prób. Naprawa: zmniejsz liczbę prób, dodaj exponential back-off i random jitter. ([learn.microsoft.com)

  • „Nie wiemy, co retryuje” — problem: brak metryk/trace. Naprawa: dodaj tagowanie/logowanie prób i ID operacji.

Co warto sprawdzić teraz (jeśli nie jesteś pewien)

  • Sprawdź, czy operacje są idempotentne — jeśli nie, dodaj kompensację lub unikaj automatycznego retry.

  • Ustal maxReceiveCount dla DLQ (przetestuj kilka wartości) i ustaw alarm na ApproximateNumberOfMessagesVisible. ([docs.aws.amazon.com)

  • Przeprowadź testy z wstrzykiwaniem błędów, żeby zobaczyć zachowanie retry/DLQ/alertów. ([learn.microsoft.com)

Puenta — decyzja końcowa

Jeśli automatyzacja wpływa na klienta lub pieniądze → wdrażasz: retry z finite back-offem, DLQ oraz alarmy.
Jeśli operacja jest eksperymentalna i łatwo ją cofnąć, możesz zacząć od mniejszej kontroli, ale miej plan szybkiego wzmocnienia (DLQ + alarmy).

Przejdź do dokumentacji implementacyjnej: AWS SQS Dead-Letter Queues. ([docs.aws.amazon.com)

Dokumentacja AWS DLQ
Zdjęcie Marcela Kennera

Autor

Marcel Kenner

Business / System Analyst

Business/System Analyst z 5+ latami doświadczenia w wytwarzaniu oprogramowania. Łączę wymagania biznesowe z rozwiązaniami no-code i automatyzacją, dbając o czytelną dokumentację i mierzalne efekty.

LinkedIn

Przeczytaj również