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
Oefeninstructies
- Roep binnen het
try-blokflaky_callaan metpayloaden retourneer het resultaat. - Bereken de exponentiële cap voor deze poging met
baseen het huidige aantalattempt. - Pas volledige jitter toe door een willekeurige wachttijd te kiezen tussen
0encapmetrandom.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)