Как вы ведёте секцию system design
Вопрос
Расскажите, по какому плану вы будете вести секцию system design на 60 минут.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Начинаю с уточнения функциональных требований и явно фиксирую, что не делаем
Уточняю нефункциональные требования: масштаб, задержка, доступность, консистентность
Делаю грубую оценку RPS и объёмов и использую её в решениях
Описываю API и модель данных, выбираю хранилище под паттерн доступа
Рисую высокоуровневую схему и прохожу по ней путь запроса
Оставляю время на узкие места, отказы, масштабирование и мониторинг
Что могут спросить следом
- Сколько времени вы отведёте на требования?
- Что делать, если интервьюер торопит сразу к схеме?
- Как выбираете, где углубиться?
Разбор
Я веду секцию сам и проговариваю шаги. Первые 5-7 минут трачу на требования: 3-5 главных сценариев и то, что сознательно не делаем, затем масштаб, задержку, доступность и консистентность. Потом за пару минут считаю нагрузку порядками: RPS на чтение и запись, объём за несколько лет. Эти числа дальше обосновывают решения. Затем ключевые эндпоинты API и модель данных, хранилище выбираю под паттерн доступа. Дальше высокоуровневая схема: клиент, балансировщик, сервисы, кеш, БД, очередь, и прохожу по ней путь главного запроса. Последние 15 минут на узкие места: что упадёт при росте в 10 раз, что будет при отказе узла, горячие ключи, мониторинг. Если интервьюер тянет в конкретную сторону, иду за ним: это сигнал, что ему важно.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.