Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.
Проектирование модуля загрузки видео для гипотетического видеохостинга
Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Представим себе сервис, похожий на YouTube, где хранится огромный объём видеоматериалов. Требуется разработать компонент, отвечающий за приём загружаемых файлов. Поскольку ролики могут быть очень большими, загрузка осуществляется по частям (чанкам). Каждый фрагмент передаётся независимо, после чего система собирает их в единый файл и сохраняет в хранилище, откуда будет осуществляться последующее воспроизведение.
Основные требования:
- Приём видеоданных в виде последовательных кусочков;
- Обеспечение независимости загрузки каждого куска (может приходить в произвольном порядке);
- После получения всех частей – их конкатенация в финальный файл;
- Перемещение готового ролика в постоянное хранилище для дальнейшего доступа.
Возможные детали реализации (необязательно):
- Идентификатор загрузки, позволяющий связывать части одного видео;
- Механизм контроля целостности (контрольные суммы, версии);
- Обработка ошибок и повторных попыток загрузки отдельных чанков;
- Очистка незавершённых загрузок после таймаута.
Ответ
Создайте upload session с владельцем, общим размером и manifest частей. Каждый chunk имеет номер, размер и checksum; его можно загрузить повторно и независимо от порядка остальных.
Храните части в object storage, а состояние — устойчиво и с идемпотентными переходами. Finalize проверяет полноту и порядок, затем завершает multipart upload или собирает объект; не загружайте весь ролик в память сервера. Готовый объект публикуют после проверки целостности и безопасности. Нужны ограничения ресурсов, авторизация, срок жизни незавершённой загрузки и очистка orphan-частей.