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
Pokyny k cvičení
- Uvnitř bloku
tryzavolejflaky_calls argumentempayloada vrať její výsledek. - Vypočítej exponenciální strop pro aktuální pokus pomocí
basea hodnotyattempt. - Aplikuj full jitter: vyber náhodné čekání mezi
0acappomocí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)