ÎncepețiÎncepe gratuit

Implementarea backoff exponențial cu jitter

Integrezi un API de plăți terț care returnează uneori erori tranzitorii. Pentru a evita supraîncărcarea serviciului atunci când acesta este deja instabil, vei implementa o strategie de reîncercare bazată pe backoff exponențial cu jitter complet — crești timpul de așteptare între încercări și adaugi un element aleatoriu, astfel încât mai mulți clienți să nu reîncerce toți în același moment.

Funcția flaky_call(payload) este disponibilă: eșuează cu TransientError la primele 3 apeluri, apoi reușește la al 4-lea. time, random și TransientError sunt deja importate.

Acest exercițiu face parte din cursul

Dezvoltarea aplicațiilor pe AWS

Vezi cursul

Instrucțiuni pentru exercițiu

  • În blocul try, apelează flaky_call cu payload și returnează rezultatul.
  • Calculează limita exponențială pentru această încercare folosind base și valoarea curentă a contorului attempt.
  • Aplică jitter complet alegând un timp de așteptare aleatoriu între 0 și cap cu ajutorul random.uniform().

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul