Разработка

Как быстро нарисовать схему на собеседовании по system design

У вас сорок минут, и половина из них уходит на диаграмму. Вот как нарисовать чистую, масштабируемую схему для собеседования по system design и не потерять внимание интервьюера.

Собеседование по system design это не экзамен по рисованию, но именно на схеме большинство тихо проваливается. Схема для собеседования по system design начинается с аккуратного блока для клиента, а через тридцать минут доска превращается в заросли перекрещённых стрелок, три блока с подписью "service" и базу данных, нарисованную дважды. Интервьюер перестаёт следить, а когда он перестаёт следить, он перестаёт и верить.

Решение не в том, чтобы лучше рисовать под давлением. Решение в том, чтобы рисовать в фиксированном, отработанном порядке, тогда картинка строится сама, а ваше внимание остаётся на компромиссах, о которых вы говорите. Вот порядок, который работает, и как сделать так, чтобы каждый шаг занимал секунды, а не минуты.

Результат не диаграмма. Результат это разговор.

Интервьюеры не оценивают ваши прямоугольники. Они смотрят, можете ли вы взять расплывчатую задачу, разбить её на компоненты и рассуждать о том, что сломается первым. Диаграмма нужна, чтобы этот разговор оставался понятным: вам обоим, в реальном времени. Поэтому цель это картинка, которая всегда читаема, а не картинка, которая закончена. Если доска понятна в каждый момент, можно позволить себе говорить медленно и вдумчиво.

Отсюда два правила до того, как вы что-либо нарисуете. Говорите, пока рисуете, никогда не молчите. И никогда не перерисовывайте; перемещайте и дополняйте то, что уже есть. Оба правила выполнять гораздо проще, когда инструмент сам держит стрелки в порядке, и именно поэтому рисовать стоит на настоящем холсте, а не в общем документе.

Начните с пути запроса

У любого дизайна есть хребет: что происходит с одним запросом с момента, когда пользователь его отправил. Нарисуйте это первым, слева направо, прежде чем произнесёте слово "масштаб". Клиент, edge, то, что отвечает, то, что помнит. Пять блоков и четыре стрелки, и вам уже есть о чём говорить.

HTTPSroutequeryкэш Клиент Балансировщик+ CDN / TLS API-сервисstateless x N DB Кэш
Сначала хребет: один запрос, слева направо. Всё остальное на собеседовании это изменения этой линии.

Обратите внимание: здесь пока нет ничего хитрого, и в этом весь смысл. Вы дали интервьюеру общий словарь. Теперь каждое решение по масштабированию это маленькая видимая правка картинки, которую вы оба уже понимаете, а не новый рисунок, который приходится объяснять с нуля.

Масштабируйте вживую, по одному узкому месту

Самая интересная часть собеседования это то, что вы добавляете, когда цифры становятся большими, и хитрость в том, чтобы добавлять это на своё место на хребте, объясняя по ходу почему. Вы не украшаете; вы отвечаете на конкретную нагрузку. Пройдите по пути запроса и спросите, что упадёт первым.

  • Преобладают чтения? Поставьте реплики для чтения за базой данных и кэш перед ней. Рисуйте кэш как ответвление от блока API, а не как новую остановку на главной линии.
  • Записи идут всплесками? Добавьте очередь после API и воркер за ней, чтобы медленная работа выполнялась вне пути запроса. Теперь диаграмма показывает синхронное и асинхронное как две явно разные формы.
  • Одного региона мало? Обведите весь хребет блоком, подпишите его как регион и клонируйте. Внезапно у репликации и failover появляется своё место.
  • Одна таблица слишком горячая? Разбейте блок базы данных на шарды и скажите пару слов о ключе шардирования. Одна эта правка несёт целый разговор.

Отличные схемы system design не рисуют. Их выращивают, по одному видимому решению за раз.

System design на доске: сохраняйте читаемость, пока говорите

Доски превращаются в узлы, потому что стрелки рисуют прямыми линиями прямо через всё, что попадается на пути. На настоящем холсте можно опереться на инструменты. Используйте умные соединители, чтобы новая стрелка огибала существующие блоки, а не пересекала их, и картинка оставалась чистой даже по мере заполнения. Группируйте то, что связано (регион, асинхронную полосу, слой данных), в подписанные контейнеры, чтобы интервьюер видел структуру, а не только части. Переименовывая компонент, делайте это один раз и пусть все ссылки обновятся следом.

Всё это не про придирчивость. Это про то, чтобы вернуть себе секунды, которые иначе ушли бы на извинения за беспорядок, и потратить их на ответ.

Совет. Один раз соберите стартовую доску и используйте её на каждой тренировке: клиент, балансировщик нагрузки, stateless-сервис, кэш, основная база данных. Дублируйте её в начале пробного собеседования, и каждая сессия начнётся сразу с интересной части.

Подготовка к собеседованию по system design: тренируйте порядок, а не картинку

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

Откройте пустой холст, нарисуйте хребет из пяти блоков и начните добавлять нагрузку. К третьей тренировке диаграмма будет успевать за вашим мышлением, а не бороться с ним.

Отработайте следующий system design на настоящем холсте

Нарисуйте путь запроса, добавляйте реплики и очереди вживую, а умные соединители пусть держат доску в чистоте, пока вы говорите.

Открыть LetDraw бесплатно