Celery/Redis — стабильные очереди и расписание (worker/beat)

1536×10243 МБ
ChatGPT Image 25 янв. 2026 г., 01_04_52.png

Задача
Убрать зависания фоновых задач, снизить дубли, сделать выполнение предсказуемым по времени (очередь задач и расписание worker/beat).

Что сделано
• Диагностика очередей, ретраев и расписания beat, анализ поведения worker.
• Настройка таймаутов и стратегии повторов, контроль дублей.
• Healthchecks и базовая наблюдаемость (сигналы, метрики, алерты).
• Воспроизводимый сценарий запуска и проверок (команды и порядок действий).

Результат / Артефакты
• Evidence-lite: чек-лист проверок + итог PASS/FAIL по ключевым пунктам (обезличено).
• Команды проверок, чтобы заказчик мог повторить в своём окружении.
• Стабильный запуск worker/beat без «тихих» сбоев и подвисаний.


Evidence-lite: Checks → Evidence → PASS/FAIL (обезличено)

  1. Проверка: дрейф расписания beat в пределах допуска
    Evidence: снимок расписания + контроль временного дрейфа (обезличено)
    Статус: ✅ PASS
    Примечание: дрейф не превышает порог

  2. Проверка: живость worker и корректное завершение
    Evidence: liveness-probe + тест graceful shutdown (обезличено)
    Статус: ✅ PASS
    Примечание: зависших задач нет

  3. Проверка: защита от дублей при ретраях
    Evidence: чек-лист симуляции повторов (обезличено)
    Статус: ✅ PASS
    Примечание: дубли не выявлены

  4. Проверка: очередь не накапливается бесконтрольно
    Evidence: снимок глубины очереди (обезличено)
    Статус: ✅ PASS
    Примечание: рост backlog не наблюдается

  5. Проверка: политика таймаутов и повторов согласована
    Evidence: чек-лист параметров таймаутов/повторов (обезличено)
    Статус: ✅ PASS
    Примечание: значения консистентны

  6. Проверка: health-проверки отвечают стабильно
    Evidence: вывод /health (обезличено)
    Статус: ✅ PASS
    Примечание: без деградаций

  7. Проверка: базовые сигналы наблюдаемости присутствуют
    Evidence: чек-лист метрик/сигналов/алертов (обезличено)
    Статус: ✅ PASS
    Примечание: минимальный набор есть

  8. Проверка: повторяемость проверок обеспечена
    Evidence: список команд для повторного прогона + порядок действий
    Статус: ✅ PASS
    Примечание: шаги воспроизведения описаны


Команды (шаблоны)

(шаблоны, параметры подставляются под конкретный проект)

curl -4 http://127.0.0.1:8080/health
docker compose ps
docker compose logs --tail=200 worker
docker compose logs --tail=200 beat
docker compose exec redis redis-cli LLEN <queue_name>
docker compose stop worker
docker compose up -d worker


Типовые причины нестабильности (что обычно чинится)

• Конфликт расписания beat (часовой пояс, дрейф, несколько источников расписания).
• Агрессивные ретраи/отсутствие таймаутов → “лавина” повторов и дубли.
• Зависимости недоступны (Redis/БД), задачи копятся и “залипают”.
• Нет сигналов наблюдаемости, проблема видна слишком поздно.
• Некорректное завершение worker → “stuck tasks” и подвисания.


Безопасность

Описание и доказательства обезличены. Документ/описание не содержит токенов, паролей, IP, доменов и идентификаторов клиента. Перед передачей логов/конфигов необходимо удалять токены, пароли и чувствительные эндпоинты.