Архитектура и описание YTDLP Airflow DAGs

Этот документ описывает архитектуру и назначение DAG'ов, используемых для скачивания видео с YouTube. Система построена по паттерну "Сенсор/Воркер" для обеспечения непрерывной и параллельной обработки.

Основной цикл обработки

ytdlp_sensor_redis_queue (Сенсор)

  • Назначение: Забирает URL на скачивание из очереди Redis и запускает воркеры для их обработки.
  • Принцип работы (Запуск по триггеру):
    • По триггеру: Когда воркер ytdlp_worker_per_url успешно завершает работу, он немедленно запускает сенсор. Это обеспечивает непрерывную обработку без задержек. Запуск по расписанию отключен, чтобы избежать повторного запуска задач для заблокированных аккаунтов.
    • Логика: Извлекает из Redis (_inbox лист) пачку URL. Если очередь пуста, DAG успешно завершается до следующего запуска по триггеру.

ytdlp_worker_per_url (Воркер)

  • Назначение: Обрабатывает один URL, скачивает видео и продолжает цикл.
  • Принцип работы:
    • Получает один URL от сенсора.
    • Обращается к сервису ytdlp-ops-auth для получения info.json и socks5 прокси.
    • Скачивает видео, используя полученные данные. (TODO: заменить вызов yt-dlp как команды на вызов библиотеки).
    • В зависимости от статуса (успех/неуспех), помещает результат в соответствующий хэш Redis (_result или _fail).
    • В случае успеха, повторно запускает сенсор ytdlp_sensor_redis_queue для продолжения цикла обработки. В случае ошибки цикл останавливается для ручной диагностики.

Управляющие DAG'и

Эти DAG'и предназначены для ручного управления очередями и не участвуют в автоматическом цикле.

  • ytdlp_mgmt_queue_add_and_verify: Добавление URL в очередь задач (_inbox) и последующая проверка статуса этой очереди.
  • ytdlp_mgmt_queues_check_status: Просмотр состояния и содержимого всех ключевых очередей (_inbox, _progress, _result, _fail). Помогает отслеживать процесс обработки.
  • ytdlp_mgmt_queue_clear: Очистка (полное удаление) указанной очереди Redis. Использовать с осторожностью, так как операция необратима.

Внешние сервисы

ytdlp-ops-auth (Thrift Service)

  • Назначение: Внешний сервис, который предоставляет аутентификационные данные (токены, cookies, proxy) для скачивания видео.
  • Взаимодействие: Worker DAG (ytdlp_worker_per_url) обращается к этому сервису перед началом загрузки для получения необходимых данных для yt-dlp.

TODO (Планы на доработку)

  • Реализовать механизм "Circuit Breaker" (автоматического выключателя):
    • Проблема: Если воркер падает с ошибкой (например, из-за бана аккаунта), сенсор, запускаемый по расписанию, продолжает создавать новые задачи для этого же аккаунта, усугубляя проблему.
    • Решение:
      1. Воркер (ytdlp_worker_per_url): При сбое задачи, воркер должен устанавливать в Redis флаг временной блокировки для своего account_id (например, на 5-10 минут).
      2. Сенсор (ytdlp_sensor_redis_queue): Перед проверкой очереди, сенсор должен проверять наличие флага блокировки для своего account_id. Если аккаунт заблокирован, сенсор должен пропустить выполнение, предотвращая запуск новых воркеров для проблемного аккаунта.
    • Результат: Это предотвратит многократные повторные запросы к заблокированному аккаунту и даст системе время на восстановление.