Retry اجرای دوباره عملیاتی است که به دلیل خطای موقت شکست خورده، مانند اختلال کوتاه شبکه. تعداد تلاشها و فاصله میان آنها باید محدود باشد.
Exponential Backoff و Jitter رایجاند. Retry برای خطای دائمی یا عملیات غیرهمتوان میتواند زیانبار باشد.
برای خطای موقت HTTP میتوان Retry با Exponential Backoff و Jitter استفاده کرد. اما Retry درخواست پرداخت بدون Idempotency Key ممکن است خطرناک باشد.
درک تفاوت این موضوع با صف پیام و مسیج بروکر به انتخاب راهکار مناسبتر کمک میکند.
مثال Backoff محدود
import time
for attempt in range(4):
try:
process_message()
break
except TemporaryError:
if attempt == 3:
raise
time.sleep(2 ** attempt)
Retry برای خطای موقت مناسب است، اما درخواست پرداخت بدون کلید آیدمپوتنسی ممکن است دوبار اجرا شود. برای جلوگیری از موج ترافیک، Jitter و سقف تلاش نیز لازم است.