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
Instruksi latihan
- Di dalam blok
try, panggilflaky_calldenganpayloaddan kembalikan hasilnya. - Hitung batas eksponensial untuk percobaan ini menggunakan
basedan jumlahattemptsaat ini. - Terapkan full jitter dengan memilih waktu tunggu acak antara
0dancapmenggunakanrandom.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)