Перейти к основному содержимому

System Design — карта тем и подготовка

Разработчику Архитектору
Теория данных (раздел 3)

System design — умение спроектировать систему под измеримые требования — сколько пользователей, какой RPS, допустимая задержка, RTO/RPO при сбое, бюджет и сроки команды. На собеседовании и в продакшене от вас ждут не перечисления технологий, а цепочку решений с trade-off.

Эта страница — навигатор по материалам "Вселенной IT": шесть опорных блоков (как на типовых cheat sheet), чеклист технологий и порядок чтения. Детали по каждому рычагу — в 12 концепциях; консенсус и лидер — в Алгоритмы выбора лидера в распределённых системах и распределённых системах.

С чего начать за 30 минут

Проверьте, что понимаете задержку и пропускную способность на уровне HTTP/TCP/DNS — § в основах сети.

Затем 12 концепцийNFR в цифрах → одна задача из классических задач design с блок-схемой от клиента до БД (для "ложного CRUD" удобна email-рассылка).


Порядок изучения — от пакета до Kubernetes

Многие начинают с оркестрации и диаграмм, не понимая, что происходит с сетевым запросом и где лежат данные. Ниже — порядок, который даёт устойчивую базу; каждый шаг опирается на предыдущий.

ШагТемаЗачемГлавы энциклопедии
1СетиБез HTTP, TCP, DNS и RTT нельзя честно говорить о latency APIСеть и интернет — intro, TCP/UDP, HTTP, DNS, задержка и throughput, HTTP-экосистема
2Базы данныхМасштабирование — это прежде всего данные: индексы, репликация, партиционирование; массовые загрузки — batch/chunkОпорные темы, Основы БД, индексы и план, репликация и шардинг, пакетная работа с данными, проектирование БД
3КэшированиеБольшая доля выигрыша — запросы, которые вообще не доходят до БДRedis (TTL, eviction), CDN, 141 §2–3
4Очереди и стримингРазвязка компонентов и переживание пиков без "укладки" всех серверовАсинхронная обработка, брокеры, RabbitMQ, Kafka, SQS в облаке
5Балансировка нагрузкиГоризонтальное масштабирование stateless-сервисов141 §1, 141 §11, горизонтальное масштабирование
6Классические задачи designСобрать цепочку руками, а не заучить картинкутаблица ниже, email-рассылка, масштабируемость
7Разборы инцидентов (postmortem)Реальное обучение — чужие отказы: что сломалось и почемуЛаборатория "Разборы", инженерия устойчивости

После шагов 1–5 осмысленно читать Kubernetes и оркестрацию — как способ деплоить уже понятный контур, а не как замену фундаменту.


Пять инженерных рычагов

Любой trade-off в распределённой системе сводится к балансу пяти величин. Их стоит называть вслух на собеседовании и в ADR.

РычагВопрос архитекторуПример компромисса
LatencyКак быстро пользователь получает ответ?Кэш и CDN снижают p99; синхронная репликация на все узлы увеличивает задержку записи
DurabilityСохранятся ли данные после сбоя?WAL и реплики; асинхронная репликация быстрее, но риск потери последних секунд
ThroughputСколько операций в секунду выдержит система?Шардинг, очереди, read-реплики; узкое место часто — одна горячая партиция
AvailabilityРаботает ли сервис при падении узла?AP в CAP для ленты; CP для платежного ядра
CostСколько стоят железо, трафик и люди?"Всё в Redis" дорого по RAM; cold storage дешевле, но выше latency чтения

Связь с CAP/PACELC — распределённые системы; измеримые цели — NFR.


Типовой контур масштабируемой системы

На собеседованиях и в продакшене снова и снова встречается одна и та же скелетная схема (иногда её называют "90% scalable systems"). Компоненты и потоки данных:

  1. Клиент (браузер, мобильное приложение) обращается к CDN за статикой — CSS, JS, изображения — с edge-узла ближе к пользователю.
  2. Динамические запросы идут на балансировщик, который распределяет нагрузку и отсекает нездоровые инстансы.
  3. Слой приложенияstateless API (бизнес-логика): горизонтально масштабируется; сессии и состояние — во внешнем хранилище.
  4. Кэш (часто Redis) — горячие ключи без чтения БД на каждый запрос.
  5. Primary БД — источник истины для записи; read replica — для масштабирования чтения (отчёты, ленты, редиректы).
  6. После успешной записи в БД (или через CDC/outbox) — событие в очередь; воркеры обрабатывают тяжёлую работу (письма, аналитика, пересчёт ленты) и при необходимости снова пишут в primary.

Детали по каждому блоку — в 12 концепциях и девяти компонентах продакшн-стека MSA.


Шесть столпов и ссылки в энциклопедии

СтолпСутьКлючевые темыГде углубиться
МасштабируемостьСистема растёт по нагрузке и объёму данныхБалансировка, кэш, CDN, очереди, autoscaling, шардирование141 §1–4, 9, 12, масштабируемость, горизонтальное масштабирование
НадёжностьРабота при сбоях узлов и зависимостейРепликация, failover, бэкапы, circuit breaker, retry с лимитомошибки и исключения, инженерия устойчивости, SLA, РСУБД — репликация
Сетевые протоколыКак компоненты обмениваются даннымиHTTP/HTTPS, TCP/IP, REST, gRPC, WebSocketHTTP-экосистема, REST, GraphQL и gRPC, WebSocket
ХранениеГде и как лежат данныеSQL и NoSQL, индексы, партиционирование, шардированиеосновы БД, NoSQL, проектирование БД
БезопасностьКто вы и что вам можноАутентификация, авторизация, шифрование, rate limitingаутентификация и OAuth, OAuth в API, 141 §10 — rate limit
РаспределённостьНесколько узлов и согласованностьCAP/PACELC, консенсус, выбор лидераПроектирование распределенных систем, Алгоритмы выбора лидера в распределённых системах, PACELC

Чеклист технологий из практики и собеседований

Ниже — темы, которые чаще всего встречаются в system design (в духе обзоров вроде JavaRevisited cheat sheet 2025). Каждая строка ведёт в нашу главу.

ТемаЗачем на схемеГлава
Архитектура масштабируемых системГоризонтальное масштабирование, stateless, NFRМасштабируемость и параллелизм в системном проектировании, Проектирование веб-разработки, веб-стек
Балансировка нагрузкиРаспределение RPS, health-check141 §1
Кэширование (Redis)Снижение latency и нагрузки на БДRedis, 141 §2
Очереди (Kafka, RabbitMQ)Асинхронность, сглаживание пиков, событияброкеры, Kafka, MSA — Kafka
SQL и NoSQLСтруктура, транзакции, гибкая схема, горизонтальный ростсравнение, NoSQL intro
Шардирование и репликацияЁмкость и отказоустойчивость данных141 §9, управление РСУБД
REST и gRPCПубличный API и быстрые вызовы между сервисамиREST, GraphQL и gRPC — стили API
WebSocketДвусторонний канал, чаты, live-обновленияPolling, Long Polling, SSE и Webhook, практикум REST и WebSocket
CDNСтатика и edge ближе к пользователювеб-серверы и CDN, 141 §3
CQRSРазные модели для записи и чтенияCQRS, MSA — CQRS
Event SourcingЖурнал событий как источник истины, проекции для чтенияEvent Sourcing
Event-drivenСлабая связность через событияСобытийно-ориентированная архитектура, Проектирование распределенных систем
Микросервисы и монолитГраницы деплоя и командыАрхитектурные стили и их применение, модульный монолит, паттерны MSA
Circuit breakerЗащита при падении зависимости141 §7, Инженерия устойчивости
Leader election (Raft, Paxos)Один координатор записи в кластереАлгоритмы выбора лидера в распределённых системах
OAuth, JWTВход и доступ к APIАутентификация и авторизация, Публичный API, OAuth 2.0 и webhooks
Rate limitingЗащита API от злоупотреблений141 §10

Стили архитектуры — когда что звучит на схеме

Вопрос на собеседованииКороткий ответУглубление
Монолит или микросервисы?Сначала измеримые NFR и границы команд; микросервисы — цена сети и согласованностиМодульный монолит, Паттерны микросервисной архитектуры, Стратегии декомпозиции монолитных систем — декомпозиция
Синхронно или через события?Синхронно — когда нужен немедленный ответ; события — для развязки и пиковПроектирование API и интеграций, Outbox
CQRS нужен?Когда чтение и запись сильно различаются по нагрузке и схемеCQRS
Event Sourcing?Аудит, replay, несколько read-моделей из одного логаEvent Sourcing
Одна БД или у каждого сервиса своя?В MSA — database per service; согласованность через Saga и событияПаттерны микросервисной архитектуры, 2124 Saga
Продакшн-контур MSA

Девять типовых компонентов (gateway, registry, auth, БД, кэш, брокер, метрики, логи) — в паттернах микросервисной архитектуры.

Их удобно накладывать на ответ system design после блок-схемы запроса.


Каркас ответа на system design interview

Типичные 45–60 минут делят так (названия шагов могут отличаться у интервьюера):

ЭтапВремяЧто сделать
Уточнение требований5–10 минФункции (MVP), NFR (DAU, RPS, p99 latency, объём данных, RPO), ограничения (бюджет, регион)
Оценки (back-of-the-envelope)5 минQPS, объём хранилища, пропускная способность сети; порядок величин достаточен
High-level design15–20 минКлиент → CDN → gateway → сервисы → кэш/БД/очередь; подписать sync/async
Deep dive15–20 мин1–2 узких места: шардирование, кэш, консистентность, отказ узла
Узкие места и trade-off5 минSingle point of failure, hot key, split-brain, кэш-инвалидация

Полезные якоря из раздела:


Классические задачи system design

Прорисуйте каждую задачу по каркасу собеседования выше: NFR → оценки → high-level → deep dive. Полный разбор URL shortener — в масштабируемости и параллелизме. Развёрнутый разбор email-канала (bounces, DMARC, state machine) — в Email-рассылка как распределённая система.

ЗадачаДоминирующая нагрузкаКлючевые приёмыКуда углубиться
Сервис коротких URLЧтение (редирект) >> записьКэш по коду, KV-хранилище, шард по hash, аналитика кликов в очередь2.md § URL shortener, пример ниже
Rate limiterОчень частые проверки лимитаСчётчик в Redis, token/leaky bucket, gateway или middleware141 §10, Redis — rate limiter
ЧатМного долгих соединений, fan-out сообщенийWebSocket/SSE, шард по room_id, очередь на доставку офлайн-пользователямWebSocket, практикум REST и WebSocket
Лента (news feed / timeline)Чтение ленты, тяжёлая запись "пост опубликован"Fan-out on write или on read, кэш ленты, precomputed timelines в RedisПроектирование распределенных систем — AP для ленты, CQRS, событийная архитектура
Система уведомленийВсплески, много каналов (push, email, SMS)Очередь по типу канала, идемпотентность, retry, шаблоны и предпочтения пользователяброкеры, pub/sub в 141 §5
Email-рассылка / newsletterВсплеск при Send, медленная внешняя доставкаOutbox, worker pool, state machine, suppression, webhooks bounces, SPF/DKIMEmail-рассылка как распределённая система, пример ниже

Пример — сервис коротких URL

Краткая демонстрация каркаса (без полного расчёта).

Требования (пример). 100M URL в месяц, чтение в 100 раз чаще записи, редирект p99 менее 100 ms, срок жизни ссылки опционален.

High-level. Клиент → балансировщик → stateless APIкэш (Redis) по short code → при промахе read replica или шард (hash кода). Запись — генерация кода, INSERT в primary, прогрев кэша. Клики — асинхронно в Kafka → агрегаты.

Deep dive. Snowflake/base62; коллизии — retry; hot URL — отдельный ключ в кэше; при partition сети — доступность редиректа с eventual учётом кликов.

Похожие разборы — Проектирование веб-разработки (веб), имитационное моделирование.

Пример — сервис email-рассылки

Краткая демонстрация каркаса (полная схема — Email-рассылка как распределённая система).

Требования (пример). 500k подписчиков, кампания "разослать за 30 минут", p99 постановки в очередь менее 2 с, дубликат письма одному адресату недопустим, hard bounce больше не получает писем.

High-level. Админка → API → запись кампании и строк campaign_recipient в primary + строки outbox в одной транзакции → relay кладёт задачи в очередьворкерыSES/SendGrid → webhook bounce/complaint обновляет suppression. Open/unsubscribe — отдельные лёгкие HTTP-сервисы.

Deep dive. Идемпотентный ключ (campaign_id, recipient_id); per-MX throttle; отдельная DLQ для poison messages; метрики глубины очереди и complaint rate; SPF/DKIM/DMARC до первого массового Send.

Типичный сбой. Воркер упал после accepted у ESP, до UPDATE в БД — при повторе задачи статус уже accepted, повторной отправки нет (идемпотентность).


Учёба на чужих сбоях

Postmortem — документ после инцидента — симптом, root cause, mitigation, fix, профилактика. Чтение публичных разборов (AWS, GitHub, Cloudflare, Statuspage компаний) учит видеть цепочку отказа, а не отдельную "упавшую кнопку".

Что смотреть в разбореЗачем
Граница системы и зависимостиПонять, какой компонент был SPOF
Метрики до и во время сбояСвязать latency/RPS/error rate с действиями
Что сработало в mitigationRunbook, откат, feature flag, drain очереди
Пункты профилактикиЧасто — кэш, лимиты, тесты на отказ узла

Шаблон и термины — лаборатория "Разборы". Связь с надёжностью — инженерия устойчивости, SLA.


Маршрут чтения по уровню

Базовый (1–2 недели) — следуйте порядку изучения сверху вниз:

  1. Сети — 2.03 intro, §4, HTTP
  2. БД — 3.05 intro, 3.08 репликация
  3. Кэш и CDN — Redis, 141 §2–3
  4. Очереди — Брокеры сообщений · 141 §4–5
  5. 12 концепций архитектуры распределённых систем целиком → одна классическая задача
  6. Аутентификация

Продвинутый

  1. Проектирование распределенных систем · Алгоритмы выбора лидера в распределённых системах
  2. Паттерны микросервисной архитектуры · Инженерия устойчивости
  3. Микросервисы — intro · Kubernetes
  4. Итоги · чек-лист · разборы инцидентов

Внешние ресурсы

  • System Design Interview Cheat Sheet (2025) — обзор тем, книг и курсов (англ.)
  • Классика: Designing Data-Intensive Applications (Kleppmann) — хранение и распределённость; System Design Interview (Xu) — формат собеседований

В энциклопедии те же идеи разложены по главам с привязкой к стеку проекта и соседним разделам (сеть, БД, DevOps, ИБ).


См. также