Mulai sekarangMulai gratis

Menerapkan exponential backoff dengan jitter

Anda sedang mengintegrasikan dengan API pembayaran pihak ketiga yang tidak stabil dan sesekali mengembalikan galat sementara. Untuk menghindari membebani layanan saat sedang bermasalah, Anda akan menerapkan strategi upaya ulang yang menggunakan exponential backoff dengan full jitter, yakni meningkatkan waktu tunggu antar upaya sambil menambahkan keacakan agar segerombolan klien tidak semuanya mencoba ulang pada saat yang sama.

Fungsi flaky_call(payload) tersedia: fungsi ini gagal dengan TransientError pada 3 pemanggilan pertama, lalu berhasil pada pemanggilan ke-4. time, random, dan TransientError sudah dimuat.

Latihan ini merupakan bagian dari kursus

Mengembangkan aplikasi di AWS

Lihat Kursus

Instruksi latihan

  • Di dalam blok try, panggil flaky_call dengan payload dan kembalikan hasilnya.
  • Hitung batas eksponensial untuk percobaan ini menggunakan base dan jumlah attempt saat ini.
  • Terapkan full jitter dengan memilih waktu tunggu acak antara 0 dan cap menggunakan random.uniform().

Latihan interaktif langsung praktik

Cobalah latihan ini dengan melengkapi kode contoh ini.

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)
Edit dan Jalankan Kode