Projetando aplicações tolerantes a falhas e resilientes na AWS

Desenvolvendo Aplicações na AWS

Ricardo Sueiras

Principal Technologist

Construindo para resiliência

construindo para resiliência

Desenvolvendo Aplicações na AWS

tudo vai falhar

Desenvolvendo Aplicações na AWS

Falhas temporárias

 

falhas temporárias

  • Entenda os modos comuns de falha:
  • Erros temporários se resolvem sozinhos; geralmente é seguro tentar de novo.
Desenvolvendo Aplicações na AWS

Timeouts

 

timeouts

  • Entenda os modos comuns de falha:
  • Erros temporários se resolvem sozinhos; geralmente é seguro tentar de novo.
  • Timeouts: serviço externo demora demais para responder.
Desenvolvendo Aplicações na AWS

Erros permanentes

 

erros permanentes

  • Entenda os modos comuns de falha:
  • Erros temporários se resolvem sozinhos; geralmente é seguro tentar de novo.
  • Timeouts: serviço externo demora demais para responder.
  • Erros permanentes: a requisição está com problema fundamental; repetir não ajuda.
Desenvolvendo Aplicações na AWS

Limites de API

 

limites de API

  • Entenda os modos comuns de falha:
  • Erros temporários se resolvem sozinhos; geralmente é seguro tentar de novo.
  • Timeouts: serviço externo demora demais para responder.
  • Erros permanentes: a requisição está com problema fundamental; repetir não ajuda.
  • Limites de taxa da API: muitas requisições; espere HTTP 429 Too Many Requests.
Desenvolvendo Aplicações na AWS

Estratégias de retentativa

  • Falhas em sistemas distribuídos costumam ser temporárias.
  • Uma requisição repetida muitas vezes funciona.
  • Adicione retentativas com cuidado; repetir às cegas pode piorar.
  • Exponential backoff: aumente o atraso entre tentativas.
  • Jitter: adicione aleatoriedade para evitar picos de retentativa.
  • Limites de retentativa: evite loops infinitos.

 

estratégias de retentativa

Desenvolvendo Aplicações na AWS

Recursos nativos do AWS SDK

  • Os SDKs da AWS tratam retentativas automaticamente.
  • As retentativas nativas incluem exponential backoff e jitter.
  • Requisições com falha ou com throttling são repetidas com atrasos crescentes.
  • Reduz o código de tratamento de erros que você precisa escrever.

 

recursos do sdk

Desenvolvendo Aplicações na AWS

Gerenciando retentativas

 

não repetir

  • Retentativa nem sempre é a resposta.
  • Erros HTTP 4xx: o servidor entendeu e rejeitou sua requisição.
  • Requisições não idempotentes: repetir pode gerar ações duplicadas ou inconsistentes.
Desenvolvendo Aplicações na AWS

Gerenciando timeouts

 

Gerenciar timeouts

  • Repetir sem limites pode ampliar problemas sob carga.
  • Combine retentativas com timeouts.
  • Um timeout define o tempo máximo de espera por resposta.
  • Toda chamada a serviço externo deve ter timeout.
Desenvolvendo Aplicações na AWS

Circuit breakers

  • Quando um serviço segue falhando, só retentar não basta.
  • Continuar enviando requisições pode sobrecarregar o serviço com falha.
  • O padrão circuit breaker pausa temporariamente chamadas para uma dependência instável.
  • Estado fechado: as requisições fluem normalmente.

 

disjuntores

Desenvolvendo Aplicações na AWS

Circuit breakers

  • Quando as falhas passam do limite, o circuito abre.
  • As próximas requisições são bloqueadas.

 

circuit breaker

Desenvolvendo Aplicações na AWS

Circuit breakers

  • Após um cooldown, o circuito entra em meio-aberto para testar a recuperação.
  • Serviço responde com sucesso: a operação normal volta.
  • Ainda falhando: o circuito permanece aberto.
  • Implemente circuit breakers no nível da aplicação.

 

circuit breaker

Desenvolvendo Aplicações na AWS

Dead letter queues

 

dql

  • Mensagens que continuam falhando podem travar o sistema.
  • Tire-as do fluxo principal de processamento.
  • Mensagens com falha vão para uma Dead Letter Queue.
  • Parte essencial de apps resilientes.
  • Mas entenda os trade-offs
Desenvolvendo Aplicações na AWS

Limites de API da AWS

 

Limites de API

  • Você interage com serviços AWS via APIs.
  • Cada serviço define seus próprios limites de taxa.
  • Ultrapassar limites aciona throttling (HTTP 429 Too Many Requests).
  • Projete sua aplicação para lidar com throttling de forma elegante.
Desenvolvendo Aplicações na AWS

Integração com serviços de terceiros

  • Serviços de terceiros trazem incerteza.
  • Você não controla desempenho nem disponibilidade.
  • Defina timeouts para evitar esperas longas.
  • Use retentativas com backoff para problemas temporários.
  • Isole dependências para limitar o raio de impacto.

 

terceiros

Desenvolvendo Aplicações na AWS

Integração com terceiros

  • Considere trocar comunicação síncrona por assíncrona.
  • Seu sistema continua processando mesmo se o serviço externo atrasar.

 

gerenciando terceiros

Desenvolvendo Aplicações na AWS

Vamos praticar!

Desenvolvendo Aplicações na AWS

Preparing Video For Download...