План проведения интервью по системному дизайну
Перевод репозитория 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 мин]
- Пропускная способность каждого уровня
- Латентность между каждым уровнем
- Обоснование общей латентности