Собеседование по system design это не экзамен по рисованию, но именно на схеме большинство тихо проваливается. Схема для собеседования по system design начинается с аккуратного блока для клиента, а через тридцать минут доска превращается в заросли перекрещённых стрелок, три блока с подписью "service" и базу данных, нарисованную дважды. Интервьюер перестаёт следить, а когда он перестаёт следить, он перестаёт и верить.
Решение не в том, чтобы лучше рисовать под давлением. Решение в том, чтобы рисовать в фиксированном, отработанном порядке, тогда картинка строится сама, а ваше внимание остаётся на компромиссах, о которых вы говорите. Вот порядок, который работает, и как сделать так, чтобы каждый шаг занимал секунды, а не минуты.
Результат не диаграмма. Результат это разговор.
Интервьюеры не оценивают ваши прямоугольники. Они смотрят, можете ли вы взять расплывчатую задачу, разбить её на компоненты и рассуждать о том, что сломается первым. Диаграмма нужна, чтобы этот разговор оставался понятным: вам обоим, в реальном времени. Поэтому цель это картинка, которая всегда читаема, а не картинка, которая закончена. Если доска понятна в каждый момент, можно позволить себе говорить медленно и вдумчиво.
Отсюда два правила до того, как вы что-либо нарисуете. Говорите, пока рисуете, никогда не молчите. И никогда не перерисовывайте; перемещайте и дополняйте то, что уже есть. Оба правила выполнять гораздо проще, когда инструмент сам держит стрелки в порядке, и именно поэтому рисовать стоит на настоящем холсте, а не в общем документе.
Начните с пути запроса
У любого дизайна есть хребет: что происходит с одним запросом с момента, когда пользователь его отправил. Нарисуйте это первым, слева направо, прежде чем произнесёте слово "масштаб". Клиент, edge, то, что отвечает, то, что помнит. Пять блоков и четыре стрелки, и вам уже есть о чём говорить.
Обратите внимание: здесь пока нет ничего хитрого, и в этом весь смысл. Вы дали интервьюеру общий словарь. Теперь каждое решение по масштабированию это маленькая видимая правка картинки, которую вы оба уже понимаете, а не новый рисунок, который приходится объяснять с нуля.
Масштабируйте вживую, по одному узкому месту
Самая интересная часть собеседования это то, что вы добавляете, когда цифры становятся большими, и хитрость в том, чтобы добавлять это на своё место на хребте, объясняя по ходу почему. Вы не украшаете; вы отвечаете на конкретную нагрузку. Пройдите по пути запроса и спросите, что упадёт первым.
- Преобладают чтения? Поставьте реплики для чтения за базой данных и кэш перед ней. Рисуйте кэш как ответвление от блока API, а не как новую остановку на главной линии.
- Записи идут всплесками? Добавьте очередь после API и воркер за ней, чтобы медленная работа выполнялась вне пути запроса. Теперь диаграмма показывает синхронное и асинхронное как две явно разные формы.
- Одного региона мало? Обведите весь хребет блоком, подпишите его как регион и клонируйте. Внезапно у репликации и failover появляется своё место.
- Одна таблица слишком горячая? Разбейте блок базы данных на шарды и скажите пару слов о ключе шардирования. Одна эта правка несёт целый разговор.
Отличные схемы system design не рисуют. Их выращивают, по одному видимому решению за раз.
System design на доске: сохраняйте читаемость, пока говорите
Доски превращаются в узлы, потому что стрелки рисуют прямыми линиями прямо через всё, что попадается на пути. На настоящем холсте можно опереться на инструменты. Используйте умные соединители, чтобы новая стрелка огибала существующие блоки, а не пересекала их, и картинка оставалась чистой даже по мере заполнения. Группируйте то, что связано (регион, асинхронную полосу, слой данных), в подписанные контейнеры, чтобы интервьюер видел структуру, а не только части. Переименовывая компонент, делайте это один раз и пусть все ссылки обновятся следом.
Всё это не про придирчивость. Это про то, чтобы вернуть себе секунды, которые иначе ушли бы на извинения за беспорядок, и потратить их на ответ.
Подготовка к собеседованию по system design: тренируйте порядок, а не картинку
Предсказать задачу нельзя, но можно предсказать форму своего ответа: сначала хребет, затем узкие места в том порядке, в котором они бьют, затем граница вокруг всего. Отрепетируйте эту последовательность десяток раз на одном холсте, и она станет мышечной памятью, а это именно то, что нужно, когда в комнате тихо, а часы тикают громко. Кандидаты, которые выглядят спокойными, не рисуют быстрее. Они рисуют в порядке, который уже проходили.
Откройте пустой холст, нарисуйте хребет из пяти блоков и начните добавлять нагрузку. К третьей тренировке диаграмма будет успевать за вашим мышлением, а не бороться с ним.