Проверяет понимание системного проектирования как процесса выбора архитектуры, компонентов и компромиссов для построения масштабируемых и надёжных систем.
System Design — это дисциплина проектирования крупных систем на уровне компонентов и их взаимодействия. В отличие от написания кода, здесь важны не синтаксис и алгоритмы, а выбор архитектуры: как разбить систему на сервисы, где хранить данные, как обеспечить масштабируемость и отказоустойчивость. Хороший дизайн — это всегда набор компромиссов между производительностью, стоимостью, сложностью и сроками.
Допустим, нужно спроектировать сервис коротких ссылок. Основные шаги: принять длинный URL, сгенерировать короткий код, сохранить соответствие и при переходе сделать редирект.
POST /shorten { "url": "https://example.com/very/long" }
-> { "short": "https://sho.rt/aB3xK9" }
GET /aB3xK9 -> 301 Location: https://example.com/very/long
// Хранение: key-value (Redis или Postgres)
// Генерация кода: base62 от автоинкремента или хэш
// Масштабирование: read-heavy, поэтому кэш и реплики
System Design применяется при проектировании новых сервисов, рефакторинге монолитов в микросервисы, подготовке к росту нагрузки и в архитектурных ревью. Понимание этой дисциплины помогает принимать осознанные решения, а не следовать моде.
Итог: System Design стоит применять, когда система выходит за рамки одного сервиса и одной машины, и важно заранее продумать масштабируемость, надёжность и стоимость владения.