Надёжные ретраи с backoff и jitter

Практические лайфхаки для разработчиков, DevOps и админов: Docker, Linux, Bash, Python, Golang, Ansible, логи и безопасность — только рабочие решения. Даем готовые команды, конфиги и приёмы диагностики, которые экономят часы и дни. Если нужно быстро настроить, отладить и обезопасить инфраструктуру — вы по адресу.

retriesbackoffjitter

👁 В автоматизации частая ошибка делать глупые ретраи: retry 3 раза и всё. В реальности это ломает системы ещё сильнее: если сервис начал падать, ты начинаешь долбить его ещё активнее. Правильный подход — exponential backoff + jitter, чтобы равномерно распределять нагрузку и не создавать «шторма» запросов.

📝 Реализация умных ретраев с backoff и jitter

import time
import random
import requests

def fetch_with_retry(url, retries=5, base_delay=0.5):
    for attempt in range(retries):
        try:
            response = requests.get(url, timeout=2)
            response.raise_for_status()
            return response.json()
        except Exception as e:
            if attempt == retries - 1:
                raise
            delay = base_delay * (2 ** attempt)
            jitter = random.uniform(0, delay / 2)
            time.sleep(delay + jitter)

data = fetch_with_retry("https://api.example.com/data")
print(data)

📌 Как это работает:

  • Задержка растёт экспоненциально (2^attempt), уменьшая давление на сервис при сбоях.
  • jitter добавляет случайность, чтобы избежать синхронных повторов от множества клиентов.
  • В случае постоянной ошибки выбрасывается исключение, а не бесконечный цикл.

❗️ В прод-автоматизации ретраи — это не «на всякий случай», а часть архитектуры. Неправильные ретраи могут добить сервис быстрее, чем его изначальная проблема.

tags: #python #автоматизация #разработка

🧭 @recura_tech 🌐 VK 🌐 MAX

Скриншот тёмной карточки с кодом на Python: пример функции fetch_with_retry с exponential backoff и jitter, логотип RECURA внизу.
Пример реализации retry с exponential backoff и jitter на Python (requests).

Читайте так же