Проектирование модуля загрузки видео для гипотетического видеохостинга

Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.

Короткий ответ

Что ответить на собеседовании

Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.

Подробный разбор

Ответ с пояснениями

Условие

Представим себе сервис, похожий на YouTube, где хранится огромный объём видеоматериалов. Требуется разработать компонент, отвечающий за приём загружаемых файлов. Поскольку ролики могут быть очень большими, загрузка осуществляется по частям (чанкам). Каждый фрагмент передаётся независимо, после чего система собирает их в единый файл и сохраняет в хранилище, откуда будет осуществляться последующее воспроизведение.

Основные требования:

  • Приём видеоданных в виде последовательных кусочков;
  • Обеспечение независимости загрузки каждого куска (может приходить в произвольном порядке);
  • После получения всех частей – их конкатенация в финальный файл;
  • Перемещение готового ролика в постоянное хранилище для дальнейшего доступа.

Возможные детали реализации (необязательно):

  • Идентификатор загрузки, позволяющий связывать части одного видео;
  • Механизм контроля целостности (контрольные суммы, версии);
  • Обработка ошибок и повторных попыток загрузки отдельных чанков;
  • Очистка незавершённых загрузок после таймаута.

Ответ

Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.

Храните части в object storage, а состояние — устойчиво и с идемпотентными переходами. Finalize проверяет полноту и порядок, затем завершает multipart upload или собирает объект; не загружайте весь ролик в память сервера. Готовый объект публикуют после проверки целостности и безопасности. Нужны ограничения ресурсов, авторизация, срок жизни незавершённой загрузки и очистка orphan-частей.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее