Архитектура и описание 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
Languages
Python
90.4%
Jinja
5.5%
Thrift
1.5%
Dockerfile
1.5%
Shell
1.1%