5.4 KiB
5.4 KiB
Архитектура и описание 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" (автоматического выключателя):
- Проблема: Если воркер падает с ошибкой (например, из-за бана аккаунта), сенсор, запускаемый по расписанию, продолжает создавать новые задачи для этого же аккаунта, усугубляя проблему.
- Решение:
- Воркер (
ytdlp_worker_per_url): При сбое задачи, воркер должен устанавливать в Redis флаг временной блокировки для своегоaccount_id(например, на 5-10 минут). - Сенсор (
ytdlp_sensor_redis_queue): Перед проверкой очереди, сенсор должен проверять наличие флага блокировки для своегоaccount_id. Если аккаунт заблокирован, сенсор должен пропустить выполнение, предотвращая запуск новых воркеров для проблемного аккаунта.
- Воркер (
- Результат: Это предотвратит многократные повторные запросы к заблокированному аккаунту и даст системе время на восстановление.