Projektowanie odpornych aplikacji na AWS

Tworzenie aplikacji na AWS

Ricardo Sueiras

Principal Technologist

Budowanie odporności

budowanie odporności

Tworzenie aplikacji na AWS

wszystko może zawieść

Tworzenie aplikacji na AWS

Błędy tymczasowe

 

błędy tymczasowe

  • Poznaj typowe rodzaje awarii:
  • Błędy tymczasowe ustępują samoistnie — zwykle można je bezpiecznie ponowić.
Tworzenie aplikacji na AWS

Przekroczenia czasu

 

przekroczenia czasu

  • Poznaj typowe rodzaje awarii:
  • Błędy tymczasowe ustępują samoistnie — zwykle można je bezpiecznie ponowić.
  • Przekroczenia czasu (timeout): zewnętrzna usługa odpowiada zbyt wolno.
Tworzenie aplikacji na AWS

Błędy trwałe

 

błędy trwałe

  • Poznaj typowe rodzaje awarii:
  • Błędy tymczasowe ustępują samoistnie — zwykle można je bezpiecznie ponowić.
  • Przekroczenia czasu (timeout): zewnętrzna usługa odpowiada zbyt wolno.
  • Błędy trwałe: żądanie jest fundamentalnie błędne — ponowienie nic nie zmieni.
Tworzenie aplikacji na AWS

Limity API

 

limity API

  • Poznaj typowe rodzaje awarii:
  • Błędy tymczasowe ustępują samoistnie — zwykle można je bezpiecznie ponowić.
  • Przekroczenia czasu (timeout): zewnętrzna usługa odpowiada zbyt wolno.
  • Błędy trwałe: żądanie jest fundamentalnie błędne — ponowienie nic nie zmieni.
  • Limity żądań API: zbyt wiele żądań — spodziewaj się HTTP 429 Too Many Requests.
Tworzenie aplikacji na AWS

Strategie ponawiania

  • Awarie w systemach rozproszonych często mają charakter tymczasowy.
  • Ponowione żądanie często kończy się sukcesem.
  • Dodawaj logikę ponowień ostrożnie — ślepe ponawianie może pogorszyć sytuację.
  • Wykładnicze wycofanie (exponential backoff): wydłużaj odstęp między próbami.
  • Jitter: dodaj losowość, aby uniknąć spiętrzenia ponowień.
  • Limit prób: zapobiega nieskończonym pętlom.

 

strategie ponawiania

Tworzenie aplikacji na AWS

Wbudowane możliwości AWS SDK

  • AWS SDK obsługuje logikę ponowień automatycznie.
  • Wbudowane ponawianie obejmuje exponential backoff i jitter.
  • Nieudane lub ograniczone żądania są ponawiane z rosnącymi opóźnieniami.
  • Ogranicza ilość kodu obsługi błędów, który musisz pisać.

 

możliwości SDK

Tworzenie aplikacji na AWS

Zarządzanie logiką ponowień

 

nie ponawiaj

  • Logika ponowień nie zawsze jest rozwiązaniem.
  • Błędy HTTP 4xx: serwer zrozumiał żądanie i je odrzucił.
  • Żądania nieidempotentne: ponawianie może skutkować duplikatami lub niespójnymi działaniami.
Tworzenie aplikacji na AWS

Zarządzanie timeoutami

 

zarządzanie timeoutami

  • Nieograniczone ponawianie może nasilać problemy pod obciążeniem.
  • Łącz ponawianie z timeoutami.
  • Timeout wyznacza maksymalny czas oczekiwania na odpowiedź.
  • Każde wywołanie zewnętrznej usługi powinno mieć ustawiony timeout.
Tworzenie aplikacji na AWS

Circuit breaker

  • Gdy usługa wciąż zawodzi, samo ponawianie nie wystarczy.
  • Ciągłe wysyłanie żądań może przeciążyć i tak już wadliwą usługę.
  • Wzorzec circuit breaker tymczasowo wstrzymuje żądania do niesprawnej zależności.
  • Stan zamknięty: żądania przepływają normalnie.

 

circuit breaker

Tworzenie aplikacji na AWS

Circuit breaker

  • Gdy liczba awarii przekroczy próg, obwód się otwiera.
  • Kolejne żądania są blokowane.

 

circuit breaker

Tworzenie aplikacji na AWS

Circuit breaker

  • Po czasie schładzania obwód przechodzi w stan półotwarty, testując odzyskanie sprawności.
  • Usługa odpowiada poprawnie: wznawiane jest normalne działanie.
  • Nadal zawodzi: obwód pozostaje otwarty.
  • Implementuj circuit breaker na poziomie aplikacji.

 

circuit breaker

Tworzenie aplikacji na AWS

Kolejki utraconych wiadomości

 

kolejka DLQ

  • Wiadomości, które wciąż się nie przetwarzają, mogą blokować system.
  • Przenieś je poza główny przepływ przetwarzania.
  • Nieudane wiadomości trafiają do kolejki utraconych wiadomości (Dead Letter Queue).
  • To kluczowy element budowania odpornych aplikacji.
  • Pamiętaj jednak o kompromisach.
Tworzenie aplikacji na AWS

Limity API w AWS

 

limity API

  • Z usługami AWS komunikujesz się przez API.
  • Każda usługa definiuje własne limity żądań API.
  • Przekroczenie limitu powoduje throttling (HTTP 429 Too Many Requests).
  • Projektuj aplikację tak, by sprawnie obsługiwała throttling.
Tworzenie aplikacji na AWS

Integracja z usługami zewnętrznymi

  • Usługi zewnętrzne wprowadzają niepewność.
  • Nie masz kontroli nad ich wydajnością ani dostępnością.
  • Ustaw timeouty, aby uniknąć długiego oczekiwania.
  • Stosuj ponawianie z backoffem przy błędach tymczasowych.
  • Izoluj zależności, aby ograniczyć zasięg awarii.

 

usługi zewnętrzne

Tworzenie aplikacji na AWS

Integracja z usługami zewnętrznymi

  • Rozważ przejście z komunikacji synchronicznej na asynchroniczną.
  • System kontynuuje przetwarzanie, nawet gdy zewnętrzna usługa jest opóźniona.

 

integracja asynchroniczna

Tworzenie aplikacji na AWS

Czas na praktykę!

Tworzenie aplikacji na AWS

Preparing Video For Download...