Вынесите обработку видео в фон: загрузка в объектное хранилище, создание задания, очередь и масштабируемые воркеры. Прогресс храните отдельно и отдавайте клиенту через polling, SSE или WebSocket.
Пользователь загружает видео и выбирает необходимую обработку, которую он хочет получить. Сервис принимает видео, применяет необходимую обработку и выдает итоговый результат. Под обработкой мы можем понимать, например, следующее: сделать видео чб, перевернуть, ускорить в N раз и т.д. Важно, чтобы пользователь мог следить за прогрессом обработки.
Вынесите обработку видео в фон: загрузка в объектное хранилище, создание задания, очередь и масштабируемые воркеры. Прогресс храните отдельно и отдавайте клиенту через polling, SSE или WebSocket.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Пользователь загружает видео и выбирает необходимую обработку, которую он хочет получить. Сервис принимает видео, применяет необходимую обработку и выдает итоговый результат. Под обработкой мы можем понимать, например, следующее: сделать видео чб, перевернуть, ускорить в N раз и т.д. Важно, чтобы пользователь мог следить за прогрессом обработки.
Нагрузка: 10.000 видео в минуту
Ответ
Вынесите обработку видео в фон: загрузка в объектное хранилище, создание задания, очередь и масштабируемые воркеры. Прогресс храните отдельно и отдавайте клиенту через polling, SSE или WebSocket.
10 000 видео в минуту — около 167 поступлений в секунду, но мощность определяется ещё длительностью, размером, кодеком и видами преобразований. API выдаёт upload URL и job_id; воркер получает параметры, проверяет допустимые операции и запускает изолированный обработчик с лимитами ресурсов. Прогресс включает этапы загрузки, ожидания и обработки, а не выдуманный точный процент. Нужны идемпотентные повторы, lease, отмена, очистка временных файлов и signed download URL. Планируйте backpressure, квоты, горизонтальное масштабирование и защиту от вредоносных медиа.