BaşlayınÜcretsiz başlayın

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

Kursa Göz Atın

Egzersiz talimatları

  • try bloğunun içinde, payload ile flaky_call çağır ve sonucunu döndür.
  • Bu deneme için, base ve mevcut attempt sayısını kullanarak üstel üst sınırı (cap) hesapla.
  • Tam jitter uygula: random.uniform() kullanarak bekleme süresini 0 ile cap arası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)
Kodu Düzenle ve Çalıştır