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

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

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

ytdlp_sensor_redis_queue (Сенсор)

  • Назначение: Забирает URL на скачивание из очереди Redis и запускает воркеры для их обработки.
  • Принцип работы (Гибридный запуск):
    • По расписанию: Каждую минуту DAG автоматически проверяет очередь 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.
Description
No description provided
Readme 3.1 MiB
Languages
Python 90.4%
Jinja 5.5%
Thrift 1.5%
Dockerfile 1.5%
Shell 1.1%