Aan de slagBegin gratis

Exponentiële backoff met jitter implementeren

Je integreert met een wankele externe betalings-API die af en toe tijdelijke fouten teruggeeft. Om te voorkomen dat je de service blijft bestoken als die het al moeilijk heeft, implementeer je een retry-strategie met exponentiële backoff met volledige jitter: je verhoogt de wachttijd tussen pogingen en voegt willekeur toe zodat een hele kudde clients niet allemaal tegelijk opnieuw probeert.

Er is een functie flaky_call(payload) beschikbaar: die faalt met TransientError bij de eerste 3 aanroepen en slaagt bij de 4e. time, random en TransientError zijn al geladen.

Deze oefening maakt deel uit van de cursus

Toepassingen ontwikkelen op AWS

Bekijk cursus

Oefeninstructies

  • Roep binnen het try-blok flaky_call aan met payload en retourneer het resultaat.
  • Bereken de exponentiële cap voor deze poging met base en het huidige aantal attempt.
  • Pas volledige jitter toe door een willekeurige wachttijd te kiezen tussen 0 en cap met random.uniform().

Interactieve oefening met praktijkervaring

Probeer deze oefening door deze voorbeeldcode aan te vullen.

def retry_with_backoff(payload, max_attempts=5, base=0.2):
    last_error = None
    for attempt in range(max_attempts):
        try:
            # Try the call
            return ____(payload)
        except TransientError as err:
            last_error = err
            # Cap grows exponentially with each attempt
            cap = ____ * (2 ** attempt)
            # Pick a random wait between 0 and cap (full jitter)
            wait = random.____(0, cap)
            time.sleep(wait)
    # All attempts failed; surface the last error
    raise last_error


result = retry_with_backoff({"order_id": 42})
print(result)
Code bewerken en uitvoeren