Что такое system design и как мыслить
System design — это искусство собрать работающую систему из готовых кирпичей и осознанно выбрать между ними.
System design (проектирование систем) — процесс определения архитектуры, компонентов и их взаимодействия так, чтобы система удовлетворяла функциональным и нефункциональным требованиям при заданных ограничениях.
Когда вы пишете функцию, у задачи обычно есть один правильный ответ. В проектировании систем правильного ответа нет — есть только компромиссы (trade-offs). Добавили кэш — ускорили чтение, но получили проблему устаревших данных. Разбили монолит на микросервисы — упростили независимые релизы, но усложнили отладку и сеть. Зрелость инженера измеряется не знанием «модных» технологий, а умением назвать цену каждого решения.
Чем это отличается от алгоритмов
Алгоритмическая задача проверяет, умеете ли вы кодировать. Задача по проектированию проверяет, умеете ли вы мыслить системно: задавать вопросы, оценивать масштаб, выбирать хранилище, рассуждать о нагрузке и отказах. Это ближе к работе тимлида и архитектора, поэтому такие задачи дают на senior-собеседованиях.
| Аспект | Алгоритмы | System design |
| Ответ | один правильный | множество допустимых, разные компромиссы |
| Масштаб | один процесс, память | тысячи серверов, сеть, диски |
| Что оценивают | корректность и сложность | ход мысли, обоснование выбора |
| Ошибка стоит | неверный результат | падение сервиса, потеря данных, деньги |
Уровни, на которых мы рассуждаем
Хорошее проектирование идёт сверху вниз. Сначала договариваемся, что система должна делать, потом грубо прикидываем сколько нагрузки она выдержит, и только затем рисуем как устроены компоненты.
- Требования — что система делает (функции) и какой она должна быть (скорость, надёжность).
- Оценки масштаба — сколько запросов в секунду, сколько данных, какая полоса.
- Высокоуровневая схема — клиенты, балансировщик, сервисы, хранилища, кэш, очереди.
- Детали — модель данных, API, шардирование, репликация, кэш-стратегия.
- Узкие места — где упрётся под нагрузкой и как это лечить.
Базовый словарь
Эти слова будут встречаться постоянно — закрепим их сразу.
| Термин | Смысл одним предложением |
| Клиент | тот, кто шлёт запрос: браузер, мобильное приложение, другой сервис. |
| Сервер / сервис | процесс, который обрабатывает запросы и возвращает ответ. |
| Latency (задержка) | сколько ждёт один запрос от отправки до ответа. |
| Throughput (пропускная способность) | сколько запросов система обрабатывает в секунду. |
| Availability (доступность) | доля времени, когда система отвечает корректно. |
Главное правило
Не бросайтесь рисовать «крутую» архитектуру с Kafka и десятью микросервисами на первой минуте. Сложность — это всегда расход: на разработку, на эксплуатацию, на отладку. Хороший инженер добавляет компонент только тогда, когда у него есть конкретная причина: цифра нагрузки, требование к задержке, риск отказа. «Самое простое решение, которое держит нагрузку» — почти всегда лучший ответ.
Итог
- System design — это про компромиссы, а не про единственно верный ответ.
- Идём сверху вниз: требования → оценки → схема → детали → узкие места.
- Сложность бесплатной не бывает; добавляйте компонент только под конкретную причину.