Как обеспечить отсутствие таймлага при переносе видео с флешки на сервер
Что проверяют
Для аналитика это вопрос не про код, а про умение превратить расплывчатое «без таймлага» в измеримое требование и увидеть, где на самом деле узкое место. Следом спрашивают, какие нефункциональные требования вы запишете и как их проверят.
Как отвечать
Начните с уточнений, без них решение будет гаданием. Что именно считается таймлагом: интерфейс зависает во время копирования, видео слишком поздно становится доступно на сервере, загрузка начинается заново после обрыва сети или сбиваются таймкоды записи? Какие файлы по размеру, сколько их за раз, какой канал у пользователя, нужен ли оригинал без пережатия?
Дальше оценка. Время передачи упирается в самое медленное звено: чтение с флешки, аплинк пользователя, запись на сервере. Файл на 4 ГБ по каналу 100 Мбит/с идёт больше пяти минут при идеальных условиях, и никакая архитектура это не отменит. Задача сводится к тому, чтобы пользователь не ждал впустую и не терял сделанное:
- загрузка частями с докачкой: протокол tus или S3 multipart upload, после обрыва передача продолжается с последней подтверждённой части;
- параллельные части: помогают, когда мешает задержка сети, а не ширина канала. Флешку параллельное чтение не ускорит;
- фоновый режим: интерфейс не блокируется, виден прогресс и оставшееся время, работу можно продолжать;
- целостность: контрольная сумма каждой части и файла целиком, иначе можно быстро загрузить битое видео.
Итог оформите требованиями: «файл до 4 ГБ при канале 50 Мбит/с загружается не дольше N минут», «после обрыва сети повторно передаётся не больше одной части», «интерфейс отвечает на действия во время загрузки».
Где спотыкаются
Обещают нулевую задержку. Физику канала не обойти, честный ответ говорит о том, что зависит от системы, а что от сети.
Предлагают пережимать видео на клиенте. На слабом ноутбуке транскодирование может идти дольше самой передачи, а исходник часто нужен без потерь.
Сразу рисуют решение, не задав ни одного вопроса о пользователях, объёмах и сети. Для аналитика это главная ошибка.