Вопрос с собеседования · System design

Вас просят спроектировать ленту новостей. С чего вы начнёте оценку и какие вопросы зададите до выбора архитектуры?

MiddleОценка нагрузки
Ещё спрашивают так:
  • С чего начать system design интервью?
  • Какие уточняющие вопросы задать при проектировании ленты?
Коротко

Сначала вопросы и допущения вслух, потом цепочка от аудитории к QPS, хранению и трафику, и обязательно вывод: где узкое место и что из этого следует для архитектуры.

  • Вопросы: аудитория и активность, чтение/запись, свежесть ленты, хранение, география, медиа
  • Лента — чтение доминирует (~100:1) — архитектуру определяет чтение
  • Медиа определяют объём и трафик — их отдаёт CDN, метаданные малы

А ещё Число без архитектурного следствия не стоит ничего

Подробно

Уточняющие вопросы:

  • сколько активных пользователей в день, сколько раз открывают ленту, сколько публикуют;
  • соотношение чтения и записи — для ленты легко 100:1;
  • сколько подписок в среднем и максимум (знаменитости с миллионами подписчиков);
  • насколько свежей должна быть лента: секунды или минуты задержки допустимы;
  • хронологическая или ранжированная;
  • сколько хранить, где пользователи, есть ли фото и видео.

Цепочка расчёта (вслух, с округлением): 100 млн DAU × 10 открытий = 10⁹ чтений в сутки ≈ 10 000 QPS, пик ×3 ≈ 30 000; публикаций 10⁷ в сутки ≈ 100 QPS. Хранение постов: 10⁷ × 1 КБ = 10 ГБ в сутки (× репликация). Трафик: 30 000 × 20 КБ = 600 МБ/с метаданных; медиа — на порядки больше, их отдаёт CDN.

Выводы:

  • чтение доминирует — нужна предвычисленная лента (fan-out on write) в кэше и денормализованная модель чтения;
  • знаменитости ломают fan-out on write — гибрид;
  • хранение растёт — партиционирование по времени, холодное хранилище для старых постов;
  • медиа — объектное хранилище и CDN.

Что хотят услышать

  • Уточняющие вопросы до решения.
  • Расчёт с допущениями вслух.
  • Архитектурные выводы из чисел.

Частые ошибки

  • Сразу рисовать архитектуру без вопросов.
  • Считать числа и не делать из них выводов.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Сразу выбрать базу и нарисовать схему сервисов
  • ✗Посчитать точное число пользователей
  • ✗Начать с выбора языка и фреймворка, затем оценить, сколько серверов понадобится на старте проекта
  • ✓Уточняющие вопросы и допущения, расчёт QPS и хранения, вывод об узком месте

Что спросят дальше

  • Fan-out на запись или на чтение и почему?
  • Как изменится решение для пользователя с десятью миллионами подписчиков?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования