Concevoir des applications tolérantes aux pannes et résilientes sur AWS

Développer des applications sur AWS

Ricardo Sueiras

Principal Technologist

Concevoir pour la résilience

concevoir pour la résilience

Développer des applications sur AWS

tout finira par tomber en panne

Développer des applications sur AWS

Pannes temporaires

 

pannes temporaires

  • Connaître les modes de panne courants :
  • Les erreurs temporaires disparaissent d'elles‑mêmes ; le réessai est généralement sûr.
Développer des applications sur AWS

Timeouts

 

timeouts

  • Connaître les modes de panne courants :
  • Les erreurs temporaires disparaissent d'elles‑mêmes ; le réessai est généralement sûr.
  • Timeouts : le service externe met trop de temps à répondre.
Développer des applications sur AWS

Erreurs permanentes

 

erreurs permanentes

  • Connaître les modes de panne courants :
  • Les erreurs temporaires disparaissent d'elles‑mêmes ; le réessai est généralement sûr.
  • Timeouts : le service externe met trop de temps à répondre.
  • Erreurs permanentes : la requête est fondamentalement erronée, réessayer ne sert à rien.
Développer des applications sur AWS

Limites d'API

 

limites d'API

  • Connaître les modes de panne courants :
  • Les erreurs temporaires disparaissent d'elles‑mêmes ; le réessai est généralement sûr.
  • Timeouts : le service externe met trop de temps à répondre.
  • Erreurs permanentes : la requête est fondamentalement erronée, réessayer ne sert à rien.
  • Limites de débit d'API : trop de requêtes, attendre HTTP 429 Too Many Requests.
Développer des applications sur AWS

Stratégies de réessai

  • Dans les systèmes distribués, les pannes sont souvent temporaires.
  • Une requête réessayée aboutit souvent.
  • Ajoutez le réessai avec soin ; des réessais aveugles peuvent aggraver la situation.
  • Backoff exponentiel : augmenter l'intervalle entre réessais.
  • Jitter : ajouter de l'aléatoire pour éviter les pics de réessai.
  • Limites de réessai : éviter les boucles infinies.

 

stratégies de réessai

Développer des applications sur AWS

Capacités natives des SDK AWS

  • Les SDK AWS gèrent automatiquement les réessais.
  • Le réessai intégré inclut backoff exponentiel et jitter.
  • Les requêtes en échec ou limitées sont réessayées avec des délais croissants.
  • Réduit le code de gestion des erreurs à écrire.

 

capacités du SDK

Développer des applications sur AWS

Gérer la logique de réessai

 

ne pas toujours réessayer

  • Le réessai n'est pas toujours la solution.
  • Erreurs HTTP 4xx : le serveur a compris puis rejeté la requête.
  • Requêtes non idempotentes : réessayer peut dupliquer ou incohérer des actions.
Développer des applications sur AWS

Gérer les timeouts

 

Gérer les timeouts

  • Réessayer sans limite peut amplifier les problèmes en charge.
  • Combinez réessais et timeouts.
  • Un timeout fixe le temps d'attente maximal d'une réponse.
  • Chaque appel à un service externe doit avoir un timeout.
Développer des applications sur AWS

Circuit breakers

  • Si un service échoue sans cesse, les réessais ne suffisent pas.
  • Continuer à envoyer des requêtes surcharge le service en panne.
  • Le « circuit breaker » interrompt temporairement les appels vers une dépendance défaillante.
  • État fermé : les requêtes passent normalement.

 

disjoncteurs

Développer des applications sur AWS

Circuit breakers

  • Quand les échecs dépassent un seuil, le circuit s'ouvre.
  • Les requêtes suivantes sont bloquées.

 

disjoncteur

Développer des applications sur AWS

Circuit breakers

  • Après un délai, le circuit passe en état semi‑ouvert pour tester le rétablissement.
  • Réponse réussie : reprise du fonctionnement normal.
  • Encore en échec : le circuit reste ouvert.
  • Implémentez les circuit breakers au niveau applicatif.

 

disjoncteur

Développer des applications sur AWS

Dead letter queues

 

dql

  • Des messages qui échouent en boucle peuvent bloquer le système.
  • Les extraire du flux principal.
  • Les messages en échec vont dans une Dead Letter Queue.
  • Élément clé de la résilience applicative.
  • Mais comprendre les compromis.
Développer des applications sur AWS

Limites des API AWS

 

Limites d'API

  • Vous interagissez avec les services AWS via des API.
  • Chaque service définit ses propres limites de débit.
  • Dépasser ces limites déclenche le throttling (HTTP 429 Too Many Requests).
  • Concevez votre application pour gérer ce throttling proprement.
Développer des applications sur AWS

Intégrer des services tiers

  • Les services tiers ajoutent de l'incertitude.
  • Vous ne contrôlez ni leurs performances ni leur disponibilité.
  • Définissez des timeouts pour éviter les longues attentes.
  • Utilisez des réessais avec backoff pour les problèmes temporaires.
  • Isolez les dépendances pour limiter l'impact.

 

services tiers

Développer des applications sur AWS

Intégration avec des tiers

  • Envisagez de passer du synchrone à l'asynchrone.
  • Votre système continue à traiter même si le service externe est lent.

 

gérer les services tiers

Développer des applications sur AWS

Passons à la pratique !

Développer des applications sur AWS

Preparing Video For Download...