Короткий ответ
Retry — повторная попытка выполнить запрос после сбоя; без аккуратной настройки он может привести к дублированию операций и усилить нагрузку на уже перегруженный сервис.
Как это работает подробнее
Клиент перехватывает ошибку/таймаут и повторяет запрос через паузу, иногда с ограничением числа попыток.
Пример кода
example.py
for attempt in range(3):
try:
return httpx.post(url, json=payload, timeout=5)
except httpx.TimeoutException:
if attempt == 2:
raise
time.sleep(2 ** attempt)Что использовать на практике
- Практика. Retry безопасен для идемпотентных операций (GET, PUT) или при защите идемпотентности; для операций без такой защиты (например, POST оплаты) повтор может задвоить списание.
Подводные камни
- Риск. Ретраить без задержки (retry storm усиливает нагрузку на упавший сервис); ретраить ошибки, которые не являются временными (например, 400 Bad Request).