Мобильный system design: загрузка фото и видео
Вопрос
Спроектируйте в приложении загрузку фото и видео (до 2 ГБ) в облако: выбор из галереи, прогресс, фоновая загрузка, возобновление после обрыва, экономия трафика.
Коротко
Что должно быть в решении
- 1Требования: размеры файлов, фоновая работа, только Wi-Fi по настройке, прогресс, отмена
- 2Подготовка: сжатие и перекодирование видео, HEIC/JPEG, удаление геометки по настройке, хеш файла
- 3API: создание сессии загрузки, presigned URL на части, завершение и подтверждение
- 4Клиент: очередь загрузок в базе, фоновая сессия или WorkManager, параллельность частей
- 5Надёжность: повтор частей с backoff, возобновление после перезапуска, проверка целостности
- 6UX и ресурсы: прогресс, пауза, уведомление о завершении, батарея и трафик
Что спросит интервьюер
- Как продолжить загрузку после того, как система выгрузила приложение?
- Как не загружать дубликаты одних и тех же фото?
Разбор
Пользователь выбирает файлы, клиент сразу создаёт записи в очереди загрузок (база) и показывает их со статусом. Подготовка в фоне: видео перекодируется в разумный битрейт, фото в JPEG или HEIC с ограничением размера, считается хеш (для дедупликации на сервере).
API: POST /uploads создаёт сессию и возвращает размер части и presigned URL для частей; клиент грузит части напрямую в объектное хранилище; POST /uploads/{id}/complete собирает файл. Сервер по хешу может сразу ответить «уже есть».
Выполнение: на iOS фоновая URLSession с upload-задачами из файлов (части пишутся во временные файлы), на Android WorkManager с ограничением по сети (только Wi-Fi, если выбрано) и foreground service с уведомлением для больших файлов. Части грузятся в 2-3 потока, ошибки повторяются с экспоненциальной задержкой, прогресс сохраняется, и после перезапуска загрузка продолжается с первой незагруженной части.
UX: прогресс в списке и в уведомлении, пауза и отмена, уведомление о завершении. Ресурсы: ограничение параллельности, отказ от загрузки при низком заряде по настройке.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Мобильный system design: лента новостей с картинками и видео
Следующий вопрос
Мобильный system design: мессенджер
Ещё по теме «Мобильный system design»
- Мобильный system design: SDK аналитики событий
- Мобильный system design: перевод денег в банковском приложении
- Мобильный system design: каталог и корзина маркетплейса
- Мобильный system design: заметки с синхронизацией между устройствами
- Мобильный system design: истории (stories)
- Мобильный system design: такси с отслеживанием машины на карте
- Оценка объёмов в мобильном system design
- Пагинация ленты на мобильном