Kom igångKom igång gratis

Implementera exponentiell backoff med jitter

Du integrerar med ett opålitligt betalnings-API från en tredjepartsleverantör som ibland returnerar tillfälliga fel. För att undvika att överbelasta tjänsten när den redan är hårt belastad ska du implementera en återförsöksstrategi med exponentiell backoff och full jitter – väntetiden ökar för varje försök och slumpmässigheten gör att en grupp klienter inte alla försöker igen exakt samtidigt.

Funktionen flaky_call(payload) är tillgänglig: den misslyckas med TransientError vid de första 3 anropen och lyckas vid det 4:e. time, random och TransientError är redan inladdade.

Den här övningen är en del av kursen

Utveckla applikationer på AWS

Visa kurs

Övningsinstruktioner

  • Inuti try-blocket anropar du flaky_call med payload och returnerar resultatet.
  • Beräkna det exponentiella taket för det aktuella försöket med hjälp av base och det nuvarande värdet på attempt.
  • Applicera full jitter genom att välja en slumpmässig väntetid mellan 0 och cap med random.uniform().

Interaktiv övning med praktiskt arbete

Testa den här övningen genom att slutföra den här exempelkoden.

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)
Redigera och kör kod