План проведения интервью по системному дизайну

Перевод репозитория https://leetcode.com/discuss/career/229177/My-System-Design-Template

1. Ожидания от функционала [5 мин]

  • Варианты использования
  • Сценарии, которые не будут охвачены
  • Кто будет использовать
  • Сколько пользователей будет
  • Шаблоны использования

2. Оценки [5 мин]

  • Пропускная способность (QPS для запросов на чтение и запись)
  • Ожидаемая латентность системы (для запросов на чтение и запись)
  • Соотношение чтения/записи
  • Оценки трафика
  • Запись (QPS, объем данных)
  • Чтение (QPS, объем данных)
  • Оценки хранилища
  • Оценки памяти
  • Какие данные мы хотим хранить в кэше, если используем его
  • Сколько RAM и машин нам нужно для достижения этого
  • Объем данных для хранения на диске/SSD

3. Цели проектирования [5 мин]

  • Требования к латентности и пропускной способности
  • Согласованность vs Доступность [Слабая/сильная/итоговая => согласованность | Отказоустойчивость/репликация => доступность]

4. Высокоуровневый дизайн [5-10 мин]

  • API для сценариев чтения/записи критических компонентов
  • Схема базы данных
  • Базовый алгоритм
  • Высокоуровневый дизайн для сценариев чтения/записи

5. Глубокое погружение [15-20 мин]

Масштабирование алгоритма

Масштабирование отдельных компонентов:

  • Доступность, согласованность и масштабируемость для каждого компонента
  • Паттерны согласованности и доступности

Рассмотрение следующих компонентов, их интеграции и пользы:

a) DNS

b) CDN [Push vs Pull]

c) Балансировщики нагрузки [Активный-Пассивный, Активный-Активный, Уровень 4, Уровень 7]

d) Обратный прокси

e) Масштабирование уровня приложений [Микросервисы, Обнаружение сервисов]

f) БД [RDBMS, NoSQL]

  • RDBMS
  • Мастер-слейв, Мастер-мастер, Федерация, Шардинг, Денормализация, Оптимизация SQL
  • NoSQL
  • Ключ-Значение, Широкая колонка, Граф, Документ
  • Быстрый поиск:
    • RAM [Ограниченный размер] => Redis, Memcached
    • AP [Неограниченный размер] => Cassandra, RIAK, Voldemort
    • CP [Неограниченный размер] => HBase, MongoDB, Couchbase, DynamoDB

g) Кэши

  • Клиентское кэширование, CDN кэширование, Кэширование веб-сервера, Кэширование базы данных, Кэширование приложений, Кэш на уровне запросов, Кэш на уровне объектов
  • Политики вытеснения:
  • Cache aside
  • Write through
  • Write behind
  • Refresh ahead

h) Асинхронность

  • Очереди сообщений
  • Очереди задач
  • Обратное давление

i) Коммуникация

  • TCP
  • UDP
  • REST
  • RPC

6. Обоснование [5 мин]

  • Пропускная способность каждого уровня
  • Латентность между каждым уровнем
  • Обоснование общей латентности