Návrh odolných aplikací na AWS

Developing Applications on AWS

Ricardo Sueiras

Principal Technologist

Budování odolnosti

budování odolnosti

Developing Applications on AWS

vše může selhat

Developing Applications on AWS

Dočasná selhání

 

dočasná selhání

  • Rozeznávej běžné typy selhání:
  • Dočasné chyby zmizí samy, opakování požadavku je obvykle bezpečné.
Developing Applications on AWS

Timeouty

 

vypršení časového limitu

  • Rozeznávej běžné typy selhání:
  • Dočasné chyby zmizí samy, opakování požadavku je obvykle bezpečné.
  • Timeout: externí služba neodpovídá včas.
Developing Applications on AWS

Trvalé chyby

 

trvalé chyby

  • Rozeznávej běžné typy selhání:
  • Dočasné chyby zmizí samy, opakování požadavku je obvykle bezpečné.
  • Timeout: externí služba neodpovídá včas.
  • Trvalé chyby: požadavek je zásadně vadný, opakování nepomůže.
Developing Applications on AWS

Limity API

 

limity API

  • Rozeznávej běžné typy selhání:
  • Dočasné chyby zmizí samy, opakování požadavku je obvykle bezpečné.
  • Timeout: externí služba neodpovídá včas.
  • Trvalé chyby: požadavek je zásadně vadný, opakování nepomůže.
  • Limity API: příliš mnoho požadavků, očekávej HTTP 429 Too Many Requests.
Developing Applications on AWS

Strategie opakování

  • Selhání v distribuovaných systémech bývají dočasná.
  • Opakovaný požadavek často uspěje.
  • Retry logiku přidávej opatrně – slepé opakování může věci zhoršit.
  • Exponenciální backoff: postupně prodlužuj prodlevu mezi pokusy.
  • Jitter: přidej náhodnost, aby nedocházelo ke spiků při opakování.
  • Limit opakování: zabraň nekonečným smyčkám.

 

strategie opakování

Developing Applications on AWS

Nativní možnosti AWS SDK

  • AWS SDK zvládají retry logiku automaticky.
  • Vestavěné opakování zahrnuje exponenciální backoff i jitter.
  • Neúspěšné nebo omezené požadavky se opakují s rostoucími prodlevami.
  • Snižuje množství kódu pro ošetření chyb, který musíš napsat.

 

možnosti SDK

Developing Applications on AWS

Správa retry logiky

 

neopakuj

  • Retry logika není vždy správnou odpovědí.
  • Chyby HTTP 4xx: server požadavku rozuměl a zamítl ho.
  • Neidempotentní požadavky: opakování může způsobit duplicitní nebo nekonzistentní akce.
Developing Applications on AWS

Správa timeoutů

 

správa timeoutů

  • Neomezené opakování může při zátěži problémy zesílit.
  • Kombinuj opakování s timeouty.
  • Timeout určuje maximální dobu čekání na odpověď.
  • Každé volání externí služby by mělo mít timeout.
Developing Applications on AWS

Circuit breaker

  • Když služba opakovaně selhává, samotné opakování nestačí.
  • Pokračující zasílání požadavků může přetížit selhávající službu.
  • Vzor circuit breaker dočasně zastaví požadavky na nefunkční závislost.
  • Stav Closed: požadavky proudí normálně.

 

circuit breaker

Developing Applications on AWS

Circuit breaker

  • Když selhání překročí prahovou hodnotu, obvod se otevře.
  • Další požadavky jsou blokovány.

 

circuit breaker

Developing Applications on AWS

Circuit breaker

  • Po prodlevě přejde obvod do stavu Half-Open a testuje obnovu.
  • Služba odpoví úspěšně: obnoví se normální provoz.
  • Stále selhává: obvod zůstane otevřený.
  • Circuit breaker implementuj na úrovni aplikace.

 

circuit breaker

Developing Applications on AWS

Fronty mrtvých zpráv

 

dlq

  • Zprávy, které opakovaně selhávají, mohou zablokovat systém.
  • Přesuň je mimo hlavní tok zpracování.
  • Neúspěšné zprávy putují do fronty mrtvých zpráv (Dead Letter Queue).
  • Klíčová součást odolných aplikací.
  • Nezapomeň však na kompromisy.
Developing Applications on AWS

Limity AWS API

 

limity API

  • Se službami AWS komunikuješ přes API.
  • Každá služba má vlastní limity volání API.
  • Překročení limitů spustí throttling (HTTP 429 Too Many Requests).
  • Navrhni aplikaci tak, aby throttling zvládala elegantně.
Developing Applications on AWS

Integrace se službami třetích stran

  • Služby třetích stran přinášejí nejistotu.
  • Jejich výkon ani dostupnost nemáš pod kontrolou.
  • Nastav timeouty, aby ses vyhnul/a dlouhému čekání.
  • Pro dočasné problémy používej opakování s backoffem.
  • Izoluj závislosti, abys omezil/a rozsah dopadu selhání.

 

třetí strany

Developing Applications on AWS

Integrace s třetími stranami

  • Zvaž přechod ze synchronní na asynchronní komunikaci.
  • Systém pokračuje ve zpracování i při zpoždění externí služby.

 

správa třetích stran

Developing Applications on AWS

Pojďme cvičit!

Developing Applications on AWS

Preparing Video For Download...