Как личный проект по расшифровке видео обернулся сложной системой защиты от SSRF и отказоустойчивости
Разработка сервиса для автоматической обработки видео, созданного разработчиком ради собственной эффективности, продемонстрировала, как простая идея быстро трансформируется в инженерную задачу. Статья детально разбирает технические решения, принятые при создании системы с поддержкой нескольких уровней обработки данных.
# От личных заметок до отказоустойчивой системы: разбор сервиса для расшифровки видео
Задача создания инструмента для автоматизации работы с видео часто кажется простой: загрузить материал, получить текст и извлечь из него суть. На практике разработка подобного сервиса, известного как postvid.ru, превратилась в процесс, потребовавший внедрения многослойных архитектурных решений, защиты от сложных атак и создания гибких цепочек обработки данных.
Основатель проекта начал разработку не ради создания стартапа, а чтобы сэкономить время на просмотре записей для формирования тезисов. Изначально планировался минималистичный стек, но реальные условия эксплуатации потребовали более серьезного подхода к надежности и безопасности.
Архитектура и выбор инструментов
Сервис построен на основе веб-приложения FastAPI, что позволило быстро развернуть API для взаимодействия с клиентами. В основе процесса лежит пайплайн, состоящий из нескольких последовательных шагов: проверка исходной ссылки, расшифровка речи, генерация ключевых тезисов и формирование финальных продуктов.
Для распознавания речи выбрана модель faster-whisper в конфигурации small. Это решение обусловлено спецификой серверной инфраструктуры: использование модели среднего размера на процессоре (CPU) приводило к неприемлемо длительному времени ожидания результатов, тогда как модель малого размера находила баланс между скоростью и качеством, что критично для серверов без графических ускорителей.
Для этапа извлечения смысловой нагрузки используется иерархическая система. В приоритете находятся облачные модели, такие как YandexGPT или совместимые с протоколом OpenAI API. Если доступ к ним нарушен, система автоматически переключается на локальную модель, запущенную через Ollama на том же сервере. В крайнем случае, когда нейросети недоступны, применяется алгоритм без машинного обучения, использующий эвристики для выделения наиболее весомых предложений.
Формирование финальных продуктов, включая Excel-таблицы, презентации и карточки для соцсетей, осуществляется с помощью библиотек openpyxl, python-ppptx и Pillow. Базой данных для хранения сессий, учетных записей и информации о подписках выбран SQLite. Разработчик сознательно отказался от Postgres, посчитав, что текущая нагрузка не требует дополнительной сложности инфраструктуры.
Обеспечение отказоустойчивости и защиты
Одним из первых вызовов стала надежность внешнего звена — облачных нейросетей. Прямое обращение к ним без механизмов резервирования приводило к остановке работы сервиса при кратковременных сбоях провайдера. Чтобы избежать впечатления у пользователей, что сервис полностью недоступен, была внедрена система автоматического переключения (fallback).
Цепочка обработки теперь выглядит следующим образом: при недоступности облачной модели система немедленно активирует локальный резерв. Если и он не работает, подключается офлайн-алгоритм на эвристиках. Дополнительно реализован механизм кулдауна (cooldown): после неудачного запроса к основному провайдеру следующие задачи отправляются только на запасные варианты, чтобы не перегружать сеть и избегать повторных ошибок.
Пользователь получает честную информацию о том, какой движок обрабатывал задачу: облачный, локальный или алгоритмический. Такой подход позволяет оценить качество результата без искусственных анимаций загрузки, сохраняя прозрачность процесса.
Безопасность также стала приоритетом. На первый взгляд задача кажется тривиальной — скачать видео по ссылке. Однако в реальности необходимо предотвращать атаки типа SSRF (Server-Side Request Forgery). Это означает, что система должна строго проверять схему протокола (только HTTP/HTTPS) и проверять, что целевой хост не относится к внутренней сети сервера. Любые запросы во внутренние ресурсы блокируются на уровне валидации URL до начала любого скачивания данных.
Заключение
Проект демонстрирует, как простые потребности пользователя могут привести к созданию robust-систем с глубоким уровнем интеграции. Использование Docker Compose для деплоя и автоматическое выделение TLS-сертификатов через Caddy позволило упростить администрирование, в то время как модульная архитектура обработки данных обеспечила работу сервиса даже при частичных сбоях внешних зависимостей. Главное достижение заключается в том, что технологическая сложность стала невидимой для конечного пользователя, обеспечивая стабильную работу инструмента.