Diseñar aplicaciones tolerantes a fallos y resilientes en AWS

Desarrollo de aplicaciones en AWS

Ricardo Sueiras

Principal Technologist

Construir con resiliencia

construir para la resiliencia

Desarrollo de aplicaciones en AWS

todo fallará

Desarrollo de aplicaciones en AWS

Fallos temporales

 

fallos temporales

  • Comprende los modos de fallo comunes:
  • Los errores temporales se resuelven solos; normalmente es seguro reintentar.
Desarrollo de aplicaciones en AWS

Timeouts

 

timeouts

  • Comprende los modos de fallo comunes:
  • Los errores temporales se resuelven solos; normalmente es seguro reintentar.
  • Timeouts: un servicio externo tarda demasiado en responder.
Desarrollo de aplicaciones en AWS

Errores permanentes

 

errores permanentes

  • Comprende los modos de fallo comunes:
  • Los errores temporales se resuelven solos; normalmente es seguro reintentar.
  • Timeouts: un servicio externo tarda demasiado en responder.
  • Errores permanentes: la solicitud está mal planteada; reintentar no ayuda.
Desarrollo de aplicaciones en AWS

Límites de API

 

límites de API

  • Comprende los modos de fallo comunes:
  • Los errores temporales se resuelven solos; normalmente es seguro reintentar.
  • Timeouts: un servicio externo tarda demasiado en responder.
  • Errores permanentes: la solicitud está mal planteada; reintentar no ayuda.
  • Límites de velocidad de API: demasiadas solicitudes; espera HTTP 429 Too Many Requests.
Desarrollo de aplicaciones en AWS

Estrategias de reintento

  • En sistemas distribuidos, muchos fallos son temporales.
  • Un reintento suele funcionar.
  • Añade lógica de reintentos con cuidado; reintentos ciegos pueden empeorar todo.
  • Exponential backoff: aumenta el retraso entre reintentos.
  • Jitter: añade aleatoriedad para evitar picos de reintentos.
  • Límites de reintentos: evita bucles infinitos.

 

estrategias de reintento

Desarrollo de aplicaciones en AWS

Capacidades nativas del AWS SDK

  • Los SDK de AWS gestionan los reintentos automáticamente.
  • Incluyen backoff exponencial y jitter.
  • Las solicitudes fallidas o limitadas se reintentan con retrasos crecientes.
  • Reduce el código de gestión de errores que tienes que escribir.

 

capacidades del sdk

Desarrollo de aplicaciones en AWS

Gestionar la lógica de reintentos

 

no reintentar

  • La lógica de reintentos no siempre es la solución.
  • Errores HTTP 4xx: el servidor entendió y rechazó tu solicitud.
  • Solicitudes no idempotentes: reintentar puede duplicar acciones o causar inconsistencias.
Desarrollo de aplicaciones en AWS

Gestionar timeouts

 

Gestionar timeouts

  • Reintentar sin límites puede amplificar problemas bajo carga.
  • Combina reintentos con timeouts.
  • Un timeout fija el tiempo máximo de espera por una respuesta.
  • Toda llamada a servicios externos debe tener timeout.
Desarrollo de aplicaciones en AWS

Circuit breakers

  • Si un servicio falla sin parar, solo reintentos no bastan.
  • Seguir enviando solicitudes puede sobrecargarlo.
  • El patrón circuit breaker detiene temporalmente solicitudes a una dependencia no sana.
  • Estado cerrado: las solicitudes fluyen con normalidad.

 

circuit breakers

Desarrollo de aplicaciones en AWS

Circuit breakers

  • Si los fallos superan un umbral, el circuito se abre.
  • Las solicitudes posteriores se bloquean.

 

circuit breaker

Desarrollo de aplicaciones en AWS

Circuit breakers

  • Tras un enfriamiento, el circuito pasa a medio abierto para probar la recuperación.
  • Si el servicio responde bien: se reanuda la operación normal.
  • Si sigue fallando: el circuito permanece abierto.
  • Implementa circuit breakers a nivel de aplicación.

 

circuit breaker

Desarrollo de aplicaciones en AWS

Dead letter queues

 

dql

  • Mensajes que fallan una y otra vez pueden bloquear el sistema.
  • Sácalos del flujo principal de procesamiento.
  • Los mensajes fallidos van a una Dead Letter Queue.
  • Parte clave para crear aplicaciones resilientes.
  • Pero entiende los trade-offs.
Desarrollo de aplicaciones en AWS

Límites de la AWS API

 

Límites de API

  • Interactúas con AWS mediante APIs.
  • Cada servicio define sus propios límites de velocidad.
  • Si los superas, hay throttling (HTTP 429 Too Many Requests).
  • Diseña tu aplicación para gestionarlo con gracia.
Desarrollo de aplicaciones en AWS

Integración con servicios de terceros

  • Los servicios de terceros introducen incertidumbre.
  • No controlas su rendimiento ni su disponibilidad.
  • Configura timeouts para evitar esperas largas.
  • Usa reintentos con backoff para problemas temporales.
  • Aísla dependencias para limitar el impacto.

 

terceros

Desarrollo de aplicaciones en AWS

Integración con terceros

  • Valora pasar de comunicación síncrona a asíncrona.
  • Tu sistema sigue procesando aunque el servicio externo se retrase.

 

gestionar terceros

Desarrollo de aplicaciones en AWS

¡Vamos a practicar!

Desarrollo de aplicaciones en AWS

Preparing Video For Download...