Návrh odolných aplikací na AWS
Developing Applications on AWS
Ricardo Sueiras
Principal Technologist
Budování odolnosti
Dočasná selhání
Rozeznávej běžné typy selhání:
Dočasné chyby zmizí samy, opakování požadavku je obvykle bezpečné.
Timeouty
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
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
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.
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.
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.
Správa retry logiky
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.
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.
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
Když selhání překročí prahovou hodnotu, obvod se otevře.
Další požadavky jsou blokovány.
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.
Fronty mrtvých zpráv
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.
Limity AWS 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ě.
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í.
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.
Pojďme cvičit!
Developing Applications on AWS
Preparing Video For Download...