Jitter ile üstel geri çekilmeyi (exponential backoff) uygulama
Ara sıra geçici hatalar döndüren, dengesiz bir üçüncü taraf ödeme API'siyle entegre oluyorsun. Servis zaten zorlanırken yükü daha da arttırmamak için, denemeler arasındaki beklemeyi kademeli olarak artıran ve aynı anda tekrar denemeleri önlemek adına rastgelelik ekleyen, tam jitter ile üstel geri çekilme (exponential backoff) stratejisi uygulayacaksın.
Bir flaky_call(payload) fonksiyonu mevcut: ilk 3 çağrıda TransientError ile başarısız olur, 4. çağrıda başarılı olur. time, random ve TransientError zaten yüklü.
Bu egzersiz, kursun bir parçasıdır
AWS üzerinde uygulama geliştirme
Egzersiz talimatları
trybloğunun içinde,payloadileflaky_callçağır ve sonucunu döndür.- Bu deneme için,
baseve mevcutattemptsayısını kullanarak üstel üst sınırı (cap) hesapla. - Tam jitter uygula:
random.uniform()kullanarak bekleme süresini0ilecaparasında rastgele seç.
Uygulamalı etkileşimli egzersiz
Bu egzersizi bu örnek kodu tamamlayarak deneyin.
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)