L'exponential backoff est une stratégie de gestion des erreurs réseau qui consiste à espacer progressivement les nouvelles tentatives après un échec, en doublant le délai d'attente à chaque retry.
Sans cette logique, un client qui réessaie immédiatement après un échec risque de surcharger un serveur déjà en difficulté — aggravant le problème au lieu de le résoudre.
Fonctionnement
Tentative 1 → échec → attendre 1s
Tentative 2 → échec → attendre 2s
Tentative 3 → échec → attendre 4s
Tentative 4 → échec → attendre 8s
...jusqu'au succès ou nombre max de tentatives
Exemple
import time
def fetch_with_backoff(url, max_retries=5):
delay = 1
for attempt in range(max_retries):
response = requests.get(url)
if response.status_code == 200:
return response
print(f"Échec, retry dans {delay}s...")
time.sleep(delay)
delay *= 2 # doublement du délai
raise Exception("Max retries atteint")
Jitter
En production, on ajoute souvent un jitter (délai aléatoire) pour éviter que tous les clients réessaient exactement au même moment (thundering herd).
À retenir
L'exponential backoff est un pattern standard dans toute communication réseau robuste — APIs, queues, bases de données. Notre implémentation détaillée : Logique retry et exponential backoff.
