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

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

Разработчику Архитектору

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

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

С чего начать за 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Базы данныхМасштабирование — это прежде всего данные: индексы, репликация, партиционированиеОпорные темы, Основы БД, индексы и план, репликация и шардинг
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, консенсус, выбор лидераdesign/21.md, 142.md, PACELC

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

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

ТемаЗачем на схемеГлава
Архитектура масштабируемых системГоризонтальное масштабирование, stateless, NFR2.md, design/119.md, веб-стек
Балансировка нагрузкиРаспределение RPS, health-check141 §1
Кэширование (Redis)Снижение latency и нагрузки на БДRedis, 141 §2
Очереди (Kafka, RabbitMQ)Асинхронность, сглаживание пиков, событияброкеры, Kafka, MSA — Kafka
SQL и NoSQLСтруктура, транзакции, гибкая схема, горизонтальный ростсравнение, NoSQL intro
Шардирование и репликацияЁмкость и отказоустойчивость данных141 §9, управление РСУБД
REST и gRPCПубличный API и быстрые вызовы между сервисами130
WebSocketДвусторонний канал, чаты, live-обновления129, практикум REST и WebSocket
CDNСтатика и edge ближе к пользователювеб-серверы и CDN, 141 §3
CQRSРазные модели для записи и чтения2122.md, MSA — CQRS
Event SourcingЖурнал событий как источник истины, проекции для чтения2123.md
Event-drivenСлабая связность через события2127.md, design/21.md
Микросервисы и монолитГраницы деплоя и команды101.md, модульный монолит, паттерны MSA
Circuit breakerЗащита при падении зависимости141 §7, 2136.md
Leader election (Raft, Paxos)Один координатор записи в кластере142.md
OAuth, JWTВход и доступ к API111, 1171.md
Rate limitingЗащита API от злоупотреблений141 §10

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

Вопрос на собеседованииКороткий ответУглубление
Монолит или микросервисы?Сначала измеримые NFR и границы команд; микросервисы — цена сети и согласованности2126, 118, 104 — декомпозиция
Синхронно или через события?Синхронно — когда нужен немедленный ответ; события — для развязки и пиков117, Outbox
CQRS нужен?Когда чтение и запись сильно различаются по нагрузке и схеме2122
Event Sourcing?Аудит, replay, несколько read-моделей из одного лога2123
Одна БД или у каждого сервиса своя?В MSA — database per service; согласованность через Saga и события118, 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) — в 144.md.

ЗадачаДоминирующая нагрузкаКлючевые приёмыКуда углубиться
Сервис коротких 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 в Redisdesign/21.md — AP для ленты, CQRS, событийная архитектура
Система уведомленийВсплески, много каналов (push, email, SMS)Очередь по типу канала, идемпотентность, retry, шаблоны и предпочтения пользователяброкеры, pub/sub в 141 §5
Email-рассылка / newsletterВсплеск при Send, медленная внешняя доставкаOutbox, worker pool, state machine, suppression, webhooks bounces, SPF/DKIM144.md, пример ниже

Пример — сервис коротких 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 учётом кликов.

Похожие разборы — design/119.md (веб), имитационное моделирование.

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

Краткая демонстрация каркаса (полная схема — 144.md).

Требования (пример). 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. Очереди — 121 · 141 §4–5
  5. 141.md целиком → одна классическая задача
  6. Аутентификация

Продвинутый

  1. design/21.md · 142.md
  2. design/118.md · 2136.md
  3. Микросервисы — intro · Kubernetes
  4. Итоги · чек-лист · разборы инцидентов

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

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

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


См. также

См. также

Другие статьи этого же раздела в боковом меню (как на странице "О разделе").