Začněte nyníZačněte zdarma

Implementace exponenciálního backoffu s jitterem

Integruješ nestabilní API třetí strany pro platby, které občas vrací přechodné chyby. Aby ses vyhnul/a zbytečnému zahlcení služby v momentě, kdy už má potíže, implementuješ strategii opakování pokusů využívající exponenciální backoff s full jitterem — čekání mezi pokusy se prodlužuje a přidaná náhodnost zabraňuje tomu, aby velké množství klientů opakovalo pokusy ve stejný okamžik.

K dispozici máš funkci flaky_call(payload): při prvních 3 voláních selže s chybou TransientError, při 4. volání uspěje. time, random i TransientError jsou již načteny.

Toto cvičení je součástí kurzu

Developing Applications on AWS

Zobrazit kurz

Pokyny k cvičení

  • Uvnitř bloku try zavolej flaky_call s argumentem payload a vrať její výsledek.
  • Vypočítej exponenciální strop pro aktuální pokus pomocí base a hodnoty attempt.
  • Aplikuj full jitter: vyber náhodné čekání mezi 0 a cap pomocí random.uniform().

Interaktivní cvičení na vyzkoušení si v praxi

Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.

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)
Upravit a spustit kód