---
title: Конспект материала 20 — System Design Blueprint: The Ultimate Guide (инфографика)
source: system-design-guide.jpeg из репозитория learn-system-design; первоисточник — пост ByteByteGo EP56 (blog.bytebytego.com/p/ep56-system-design-blueprint-the), автор схемы Love Sharma; продажа постера — zonito.gumroad.com/l/systemdesignblueprint
author: Love Sharma (схема), Alex Xu / ByteByteGo (публикация), Е. Козлов (в подборке learn-system-design)
конспект: подготовлено 2026-09-17, TASK-45.24; текст снят tiled-OCR (tesseract, сетка 4×4 + точечные кропы, апскейл ×4–6), структура сверена с постом ByteByteGo EP56
статус: полная послойная расшифровка инфографики «весь дизайн на одном листе» (1400×1488). 80 % блоков уже покрыто KB §3–§11 и classic-designs; выжимка для секции — KB §13 (карта «блок → где в KB»). Этот файл — эталонная расшифровка для самопроверки по картинке и источник формулировок. Использовать как визуальный конспект за 10 минут до слота
---

# Материал 20: System Design Blueprint — The Ultimate Guide (инфографика)

Один лист, на котором нарисован **полный путь запроса через систему**: DNS → балансировщик → API-шлюз → фронтенды/CDN → бэкенды → загрузка медиа (чанки, очереди, воркеры) → БД/кэш, плюс сквозные темы слева (распределённые ID, локи, конкурентность) и общий fan-out внизу (уведомления, рекомендации, аналитика, поиск, платежи). Это не учебник, а **карта-шпаргалка**: перед секцией полезно пробежать глазами и проверить, что каждый блок умеешь назвать и объяснить трейдофф.

Происхождение: схема Love Sharma, опубликована ByteByteGo (EP56, апрель 2023) как «шаблон для прохождения system design интервью». В подборке learn-system-design лежит как третья шпаргалка (после LeetCode-шаблона и гиста vasanthk). Отличие от тех двух: здесь не процесс ответа, а **инвентарь системы** — что вообще бывает в дизайн-ответе.

Как читать расшифровку: блоки идут в порядке следования запроса по листу (слева направо, сверху вниз). Курсивом — служебные подписи листа, у списков сохранена оригинальная формулировка (перевод + английский термин). Маппинг на наши материалы — в конце каждого блока. Низкоуверенные фрагменты OCR помечены «(?)».

---

## 1. DNS — резолв домена (верхний левый угол)

Клиент (App / User) спрашивает у DNS «домен → IP?». Цепочка из трёх шагов (номера на листе):

1. **Root Nameserver (RN)** — корневой сервер: «кто отвечает за `.com`?»
2. **Top Level Domain Nameserver (TLD NS)** — сервер зоны `.com`: «кто авторитетный для `amazon.com`?»
3. **Authoritative Nameserver (ANS)** — авторитетный NS домена: отдаёт **IP записи**, здесь `12.23.34.45`

Между ними ходит **DNS Resolver** (рекурсивный резолвер, порт **:53**). Пример листа: `amazon.com` → `TLD NS of .com` → `ANS's IP`.

Хэштеги-подсказки листа: `#GeoDNS` (гео-резолв в ближайший регион), `#Root`, `#ISP` (резолвер провайдера), `#LocalCache` (кэш ОС/браузера/резолвера с TTL), `#MultipleIPs` (домен → несколько IP — простейшая балансировка).

→ KB §13.1. На секции: «клиент резолвит домен через рекурсивный resolver: root → TLD → authoritative; каждый уровень кэшируется с TTL; GeoDNS ведёт в ближайший регион».

## 2. Load Balancer + Options / Algo (верх, левее центра)

Узел **Load Balancer** — первый вход после DNS. Рядом панель **Options / Algo** (алгоритмы выбора ноды):

- **Round Robin** — дефолт для stateless-пула
- **Weighted Round Robin** — ноды разной мощности
- **Least Connections** — для долгих соединений (websocket/streaming)
- **Number of Requests** / **Active Connections** — метрики, по которым алгоритм выбирает
- **Hash / Server Stickiness** — сессии и кэш-локальность (с consistent hashing — ответ про масштабирование пула)
- **Random** — называем, но не выбираем

→ KB §13.2. Обязательная фраза: «перед LB — health checks, нездоровая нода выпадает из ротации».

## 3. API Gateway — контракт на входе (центр, верх)

Самый насыщенный блок листа. Четыре панели:

**Request (что шлюз делает с запросом):**
- Input Validation, Request Header Validations
- Authorization / Authentication (**OAuth 2.0**)
- Rate Limiting / Throttling
- Whitelist / Blacklisting
- Flow Control
- TLS Termination
- Request Deduplication (**idempotent key**)
- Metering / Usage Data Collection
- Request Dispatching
- *…many more*

**Response (что кладёт в ответ):** Gzip / deflate (компрессия), Request ID (трассировка), Pagination, Expiry Headers (кэш-контроль), Mime, Cookie, Error Codes / Message.

**Metrics:** 4XX / 5XX / 2XX, Response Time, Failed Status Codes.

**Наблюдаемость шлюза:** Access Logs, Status Codes, Number of Requests.

→ KB §9 (эксплуатация) + §13.7 (security) + §7 (идемпотентность). На секции называем 4–5 пунктов запросной стороны и 2–3 ответной — этого достаточно.

## 4. Frontend Servers + CDN + real-time транспорт (правый верх)

**Frontend Servers** — фронтенд-тир: `#inMemoryConnections` — карта «User | Connection» в памяти (пример листа: `user_1 | ada_inst_obj…`), через которую фронтенды **Dispatch Messages to other FE Servers** (рассылка между нодами для чата/живых обновлений; рядом — Dispatcher). Для стриминга/чата — отдача **Static / Stream with ABR** (адаптивный битрейт). Панель ресурсов сервера (у обоих тиров, фронтенда и бэкенда): CPU, Memory, Latency, Bandwidth, **Disk I/O (if buffering)** + **Vertical Scale / Horizontal** (наращиваем ресурсы одной машины или число машин).

**CDN / Edge Servers** — `#Global #Regional #Static`:
- Static Content с края
- **Push Hot Resource** — горячее проталкиваем на край заранее
- **Pull Rare Resource** — редкое тянут по промаху
- **Hybrid** — комбинируем
- Учёт края: Cache Miss Outs, Active Resources, Total Resources

**Real-time транспорт** (панель выбора между фронтендом и клиентом): **RTMP** (ingest видео), **WebRTC** (P2P, звонки), **Websocket** (дуплекс), **SSE** (сервер → клиент), **HTTP Short Polling**, **HTTP Long Polling**, **Webhook** (сервер → сервер), **Stream API**.

→ KB §13.3 (таблица выбора транспорта), §4 (CDN-кэш), classic-designs §3 (мессенджер) и §4 (медиа).

## 5. Backend Servers (центр)

`#ClusterOfServers`, `#MicroService`; та же панель ресурсов, что у фронтенда (CPU, Memory, Latency, Bandwidth, Disk I/O, Vertical/Horizontal scale). Держатся вместе **Heartbeat**-ами. Топологии из блока «SERVICES TO SCALE SYSTEM» (см. §6): leaderless (gossip), leader + followers, multi-leaders. Загрузка медиа — через **Upload Object via Signed URL** (подписанные ссылки на приватные объекты, KB §13.7).

## 6. SERVICES TO SCALE SYSTEM — сквозные сервисы (левая колонка)

**Distributed ID Generator Service** (генерация уникальных ID):
- **UUID** — без координации, 128 бит, без порядка
- **Auto Increment** — просто, одна нода, точка отказа
- **Auto Incr. Multiple Servers (Odd / Even)** — чёт/нечёт по нодам: без координации, но плохо масштабируется
- **Twitter's Snowflakes** — 64 бита: время + ID ноды + секвенция
- **Baidu UID generator**, **Sonyflake** — семейство snowflake
- **Offline Generations** — выдача диапазонов заранее (генератор не нужен на критическом пути)

**Distributed Resource Locking** (координация):
- **Redlock (Redis)** — быстро, компромиссы надёжности
- **Google Chubby** — кворумный лок-сервис Google
- **Apache Zookeeper** — кворумная координация (ZAB)

**Concurrency** (управление параллелизмом):
- **Serially** — строго последовательно
- **Serially Batch** — последовательными батчами
- **Pessimistic Locking** — лочим заранее, короткие критические секции
- **Optimistic Locking** — версия/CAS, ретрай при конфликте — дефолт

→ KB §13.4 (ID), §13.5 (локи и fencing token), §7 (идемпотентность).

## 7. UPLOAD VIDEO / IMAGE — пайплайн загрузки медиа (центр листа)

Единственный «сквозной кейс» листа — как загружается видео/картинка:

1. **Upload Object via Signed URL** — клиент пишет напрямую в **Object Storage** (`#S3 #Chunk #Raw`), минуя бэкенд
2. **STREAMING CHUNK METADATA TABLE** — метаданные чанков: `Key | Checksum | Timestamp` (пример: `chunk_1 | asdf23dsf3oj23098asdf3 | 132873423`), `InMemory Key Storage`; **Validate → Checksum** — проверка целостности при чтении; *Sync Centrally* — централизованная синхронизация таблицы
3. **Fan Out: For every new Chunk Object** — каждое событие нового чанка уходит в **Message Queue / Pub/Sub Queue**
4. **Processing Workers** — обработка (транскодинг, валидация): Validate Checksum; метрики: Compute Time, Failed Count, CPU / Disk etc., Encoded / Compression Ratio (?), Storage Consumed, Object Count
5. Готовые объекты — `Obj[0] | Obj[1] | Obj[2] | Obj[3] …`

**Метрики очередей** (панель рядом): Count of messages, Consumption Rate, **In-Transit (Waiting for Ack)**, Queue limit.

→ classic-designs §4 (медиа-хостинг — тот же пайплайн словами), KB §8 (очереди, лаг).

## 8. CACHE (левый низ)

**Метрики:** No. of items, Cache Miss & Hit, Disk & Memory Usage.

**Стратегии записи:** **Write-Through** (кэш+БД сразу: чтение чистое, запись медленная), **Read-Through**, **Write-Around** (мимо кэша в БД), **Write-Back** (кэш сейчас, БД потом; риск потери).

**Eviction:** LRU (Least Recently Used), LFU (Least Frequently Used), FIFO, MRU, Random Eviction, Least Used, On-Demand Expiration, Garbage Collector.

**Distributed Cache** — отдельная нода-картинка с двумя колонками: **Cache Eviction** и **Cache Invalidation** (выселение ≠ инвалидация: первое — нехватка памяти, второе — изменение данных), *Sync Centrally*.

→ KB §4 (полностью: aside/through/behind, stampede, прогрев).

## 9. DATABASE (нижний левый угол)

Четыре колонки:

**Типы БД:** RDBMS, **Column Wide** (wide-column: Cassandra/HBase), **Document**, **Key-Value**, **Graph**, **QuadTree** (пространственные данные — карты/«ближайшие N»), **Time-series**.

**DB Security:** **RBAC** (Role Based Access Control), **Data Encryption**, **Audit Trail**.

**DB Metrics:** Query response time, CPU / Disk Usage, Network Throughput, Active Connections, Storage.

**DB Sharding:** **Consistent Hashing** (минимум перемещений при ресайзе пула), **Mod Hashing / Bloom Filter**, Range based, Hash based, **Geographical** (GDPR, латентность), Directory based (lookup-сервис).

**Репликация/консистентность** (мини-блок справа от шардирования): **Quorum (Read / Write)** (W+R>N — чтение видит последнюю запись), **Hinted Handoff** (временный узел при недоступном реплике), **Merkle Tree** (быстрая сверка/анти-энтропия деревьев данных).

→ KB §3 (критерии выбора), §5 (репликация), §6 (шардирование), §7 (кворумы), §13.6 (гео).

## 10. COMMON FAN-OUT SERVICES (нижний правый угол)

Куда расходятся события из очередей — типовые потребители любого дизайна:

- **Search Service** — `#index` (инвертированный индекс)
- **Notification Service** — забота о шуме: ~Spamming, ~Stop Words, ~Dedup, ~**Retry with Idempotent Key**
- **Recommendation Service** — Filtering: **Content-Based**, **Collaborative**
- **Analytics Service** — события в аналитику
- **Payment Service → Charge Service with Idempotent Key → Third-Party Banking Service** — доменные ошибки банка как обрабатываемые ветки: Expired / Blocked / Invalid Card, Service Down, Insufficient Balance

→ KB §13.7 (платежи и security), classic-designs §2 (лента — fan-out on write/read).

---

## 11. Маппинг на наши материалы и ценность для секции

| Блок листа | Где у нас разобрано | Новое для KB (внесено) |
|---|---|---|
| DNS (root→TLD→ANS, GeoDNS) | KB §13.1 | — (было внесено в 45.12) |
| LB-алгоритмы | KB §13.2 | — |
| API Gateway (req/resp/metrics/logs) | KB §9, §13.7 | списки полей req/resp (§13.8) |
| FE servers, in-memory connections | classic-designs §3 | — |
| CDN (push/pull/hybrid, miss outs) | KB §4 (CDN-кэш), §13 | push hot / pull rare (§13.8) |
| Real-time транспорт | KB §13.3 | — |
| Distributed ID | KB §13.4 | offline generations (§13.8) |
| Локи/координация, конкурентность | KB §13.5, §7 | serially batch (§13.8) |
| Upload-пайплайн (чанки, checksum, MQ) | classic-designs §4 | metadata-таблица чанков (§13.8) |
| Cache | KB §4 | eviction-список листа сверен |
| Database + quorum/hinted/merkle | KB §3, §5–§7 | — |
| Fan-out services | KB §13.7 | recommendation-фильтры (§13.8) |

**Как использовать перед секцией (10 минут):** пройти глазами маршрут запроса по листу 1→10 и на каждом блоке спросить себя «умею ли я это назвать и назвать трейдофф?». Провал = точечное повторение по ссылке из третьей колонки. Печатать сам лист не нужно: наша печатная карточка — `../methodology.md` §7 + KB §1.2/§11 (решение по шпаргалкам — TASK-45.23).

## 12. Отличия от двух других шпаргалок подборки

- **LeetCode Template (45.22)** — *процесс* ответа: что говорить в первые 5 минут, тайминг этапов.
- **vasanthk Cheatsheet (45.23)** — *процесс + таксономии* первого поколения (слои кэша, типы LB).
- **Этот лист** — *инвентарь системы*: полный набор компонентов, которые вообще стоит назвать в дизайн-ответе. Не заменяет первые два, а достраивает: если процесс — «как говорить», то blueprint — «что называть».

Полезное перекрытие с брифом Яндекса: крупноблочная схема (этап 3) = блоки 1–5 листа; детали (этап 4) = блоки 6–9; эксплуатация (этап 6) = метрики-панели каждого блока (у листа они развешаны по всем узлам — это его главная фишка: **метрики привязаны к компонентам**, а не свалены в конец).
