Проектирование Middle Мобильный system design обновлено

Мобильный system design: истории (stories)

Вопрос

Спроектируйте клиент историй как в популярных соцсетях: лента кружков авторов, полноэкранный просмотр фото и видео с автопереключением, отметка просмотра, ответы.

Коротко

Главная метрика: время от нажатия на кружок до первого кадра. Поэтому при показе ленты кружков клиент заранее загружает первую историю первых нескольких авторов, а во время просмотра предзагружает следующие 1-2 истории текущего автора и первую следующего.

Что должно быть в решении

  1. 1
    Требования: мгновенное начало просмотра, автопереход, жесты, отметки просмотра, 24 часа жизни
  2. 2
    API: список авторов с непросмотренными, истории автора, батч отметок просмотра
  3. 3
    Предзагрузка: следующие истории и следующий автор, приоритеты, ограничение трафика
  4. 4
    Плеер: переиспользование плееров, буферизация, жесты паузы и перехода
  5. 5
    Данные: локальный кеш с TTL, офлайн-отметки просмотров в очереди
  6. 6
    Узкие места: время до первого кадра, память на видео, трафик

Что спросит интервьюер

  • Сколько историй предзагружать и как это зависит от сети?
  • Как отмечать просмотры без запроса на каждую историю?

Разбор

Главная метрика: время от нажатия на кружок до первого кадра. Поэтому при показе ленты кружков клиент заранее загружает первую историю первых нескольких авторов, а во время просмотра предзагружает следующие 1-2 истории текущего автора и первую следующего. Глубина предзагрузки зависит от сети: на Wi-Fi больше, в мобильной меньше, при режиме экономии трафика только по требованию.

Плеер: пул из 2-3 плееров переиспользуется, видео буферизуется частично, прогресс-бар по длительности, жесты: удержание это пауза, тап это следующая, свайп это следующий автор.

Отметки просмотра копятся локально и отправляются пачкой (раз в несколько секунд и при уходе с экрана), это экономит запросы и работает офлайн. Список авторов сортируется с учётом непросмотренных.

Кеш историй с TTL 24 часа, медиа в дисковом кеше с ограничением размера. Ответ на историю это сообщение в чат через общий механизм отправки.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.