title: Конспект материала 11 — ByteByteGoHq/system-design-101 source: https://github.com/ByteByteGoHq/system-design-101 author: Alex Xu и команда ByteByteGo конспект: подготовлено 2026-09-18, TASK-45.15; изучены классический README (60+ диаграмм, 14 секций, состояние до реструктуризации 04.2025) и актуальная структура репо (400 гайдов в data/guides, 15 категорий); вычитаны тексты ~25 гайдов-кандидатов на досочную выборку статус: P2-источник к слотам 21–22.09. Не учебник, а визуальный словарь: 1 диаграмма = 1 концепт. Ценность для нас — референсы «как концепт выглядит на доске» (§4–§5), карта тем для самопроверки (§3) и кейс-стади как устные аргументы (§6)
Материал 11: system-design-101 — визуальный словарь системного дизайна
Самый популярный репозиторий по системному дизайну (150k+ звёзд). Формат: каждая тема — одна диаграмма плюс страница текста. Это не учебник с последовательным изложением (роль учебников у нас играют SDP, karanpratapsingh и DDIA), а каталог готовых визуальных референсов: «как выглядит концепт X, нарисованный правильно». Для подготовки к секции это ровно то, что нужно на этапе тренировки доски: перерисовать чужую правильную схему по памяти проще, чем изобретать свою.
1. Как устроен источник (важно: у репо две эпохи)
| Эпоха | Что это | Где сейчас |
|---|---|---|
| Классический README (10.2023 — 04.2025) | 60+ диаграмм инлайн в одном README, 14 секций: протоколы, CI/CD, архитектурные паттерны, БД, кэш, микросервисы, платежи, DevOps, git, облако, Linux, security, кейс-стади | История git (последний контентный коммит 44f1251); именно эту версию все цитируют |
| Текущее состояние (с 04.2025) | README — только оглавление-ссылки на bytebytego.com; контент переехал в data/guides/ — 400 md-файлов (диаграмма на assets.bytebytego.com + текст), 15 категорий; лицензия CC BY-NC-ND |
Основная ветка репо |
Практический вывод: гайды не удалялись — они переехали и размножились (60 → 400). Читать подряд не нужно и невозможно; работать надо от нашей задачи (что уметь рисовать), а не от каталога. §3 даёт карту категорий, §4–§6 — отбор.
2. Словарь концептов: как читать этот источник
Каждый гайд отвечает на вопрос «как работает X» или «чем X отличается от Y». Три режима использования перед секцией:
- Референс для доски. Перед тренировкой схемы открыть соответствующую диаграмму, перерисовать по памяти, сравнить. Чужая композиция подсказывает, что рисовать в каком порядке и какими блоками (§4–§5).
- Словарь самопроверки. Пройтись по заголовкам гайдов как по чек-листу: «могу ли я на доске за минуту объяснить этот концепт?» — где «нет», там и повторять (§3).
- Банк аргументов. Кейс-стади реальных компаний — готовые ответы на вопрос «а как в реальности?» (§6).
Репо не даёт: сквозного фреймворка ответа (это ../methodology.md §2), чисел для оценок (KB §1–2), эталонных разборов кейсов (это ../classic-designs.md).
3. Карта тем по категориям (400 гайдов, приоритет для нашей секции)
| Категория | Гайдов | Что внутри релевантного | Наш приоритет |
|---|---|---|---|
| Database & Storage | 45 | Выбор хранилища, шардирование (4 алгоритма), B-tree vs LSM, 8 индексных структур, CAP, read replica, очереди (типы, Kafka, delivery semantics), CDC, event sourcing, изоляции/локи | Ядро — почти всё маппится на KB §3, §5–§8 |
| Cloud & Distributed Systems | 48 | 8 стратегий масштабирования, resiliency patterns, HA-схемы, ID-генераторы, distributed lock, retry-стратегии, heartbeat/обнаружение отказов, 7 классических DS-паттернов, System Design Blueprint | Ядро — KB §6, §9, §13 |
| Caching & Performance | 29 | 5 кэш-стратегий, eviction, Redis (почему быстр, архитектура, use cases), CDN, снижение латентности | Ядро — KB §4 |
| API & Web Development | 50 | Polling/SSE/WebSocket, LB vs gateway vs reverse proxy, HTTP/1→2→3, стили API, пагинация, дизайн безопасных API | Второй эшелон: транспорт и шлюз нужны, остальное — фон |
| Real World Case Studies | 32 | Discord, Twitter, Netflix, Airbnb, Hotstar, Stack Overflow, Prime Video, Slack, Uber | Банк аргументов (§6) |
| How it Works? | 18 | Дизайн Google Maps, Google Docs, чата, stock exchange, Gmail; proximity service, quadtree/geohash | Тренировочные кейсы + гео (KB §13.6) |
| Security | 35 | Session/cookie/JWT/OAuth 2.0/SSO, HTTPS/TLS, хранение паролей | Один вопрос секции «как аутентифицируем» — второй эшелон |
| Software Architecture | 24 | Микросервисные паттерны, orchestration vs choreography, DDD, трейдоффы, монолит vs микросервисы | Фон + пара аргументов |
| Payment & Fintech | 19 | VISA flow, идемпотентность платежей, reconciliation, SWIFT/ACH/UPI | Вне ядра секции; пригодится для финдомена (отклики типа Pennylane) |
| Computer Fundamentals | 12 | OSI, DNS lookup, TCP/UDP, process vs thread | Фон (KB §13.1 уже покрывает) |
| DevOps & CI/CD | 27 | K8s, Docker, deployment strategies, observability | Фон (KB §10 покрывает наблюдаемость) |
| Software Development | 28 | Алгоритмы для SDI (bloom filter, consistent hashing, leetcode-набор), конкурентность | Выборочно: «Algorithms for SDI» |
| AI & ML | 8 | ChatGPT/DeepSeek/AI agent/pipelines | Вне секции |
| DevTools | 20 | Git, JSON-визуализаторы, diagram-as-code | Не для секции |
| Technical Interviews | 5 | «How to ace SDI», «что происходит при вводе google.com» | Уже покрыто (methodology, KB §13.1) |
4. Диаграммы тира 1 — ядро доски (тренировать до автоматизма)
Критерий отбора: диаграмма нужна в любом кейсе нашей секции («крупноблочная схема сервиса класса инстаграм/твиттер + отказоустойчивость») или является типовым элементом deep-dive. Формат: что рисуем → когда на секции → где референс.
4.1 Сквозная крупноблочная схема — главная диаграмма секции
Рисуем: клиент → DNS → CDN (статика) → LB (публичный вход) → API gateway (аутентификация, rate limit, маршрутизация) → сервисы (по доменам) → распределённый кэш (Redis) → БД primary + реплики; параллельной дорожкой — очередь → воркеры; по краю — service discovery, identity provider, мониторинг/логи.
Когда: первые 15 минут секции, «high-level design» — это и есть та самая «крупноблочная схема» из брифа. Каждый блок на схеме = готовый deep-dive, если интервьюер ткнёт.
Референсы: «What does a typical microservice architecture look like?» (композиция блоков), «10 Essential Components of a Production Web Application» (порядок обхода: CI/CD → DNS → LB/reverse proxy → CDN → API → БД/кэш → job queue → поиск → мониторинг → алертинг), «Must Know System Design Building Blocks» (6 групп блоков). Детали блоков — KB §13, §3–§10.
4.2 Кэш во всех слоях («Data is cached everywhere»)
Рисуем: вертикальную дорожку запроса с 8 уровнями кэширования: браузер (HTTP-cache) → CDN → LB → память/CPU-кэш сервиса → распределённый кэш (Redis) → полнотекстовый индекс (ES) → внутри БД (WAL, buffer pool, materialized view, transaction log). У каждого уровня подписать политику устаревания.
Когда: тема «где кэш и почему» — почти гарантированный вопрос в кейсе ленты (лента = классический hot read). Плюс это заготовка ответа «как снизить нагрузку на БД».
Референс: «Data is cached everywhere» (классический README). Связка: KB §4 (стратегии, инвалидация, hot key), lsd-ultimate-guide-image.md (маршрут запроса).
4.3 Пять кэш-стратегий (cache-aside, read-through, write-around, write-through, write-back)
Рисуем: три участника (клиент — кэш — БД) и последовательности стрелок для каждой стратегии; рядом трейдоффы: write-back — быстрое запись/риск потери, write-through — консистентность/латентность записи, cache-aside — простота/рассинхрон.
Когда: deep-dive кэша в любом read-heavy кейсе. Уметь назвать комбинацию по умолчанию: cache-aside + write-around.
Референс: «Top caching strategies». Связка: KB §4, lsd-leetcode-template.md (карточка §7).
4.4 Репликация: primary + read replicas
Рисуем: primary (все записи) → 2–3 реплики (чтения); стрелки запросов от сервисов; отдельным элементом — replication lag и проблему read-after-write («создал заказ — не видит его в истории»).
Когда: масштабирование чтения в ленте/каталоге; сразу вслед за схемой БД. Обязательно назвать лаг и способы его обойти: критичные чтения → primary, read-after-write → primary, проверка caught-up.
Референс: «Read Replica Pattern» (сценарий с Alice и заказом — хорошо пересказывать как мини-историю). Связка: KB §5 (типы репликации, консистентность), §9.
4.5 Отказоустойчивый контур вокруг сервиса (вторая главная диаграмма секции)
Рисуем: сервис-прямоугольник, вокруг — восемь контуров защиты: timeout, retry (backoff + jitter), circuit breaker (closed/open/half-open), rate limiting, load shedding, bulkhead (пулы по зависимости), backpressure, «let it crash»; плюс health checks/heartbeat от мониторинга.
Когда: вторая половина секции — «отказоустойчивость» заявлена в брифе прямо. Рисуем контур поверх крупноблочной схемы: на каждый внешний вызов.
Референсы: «Resiliency Patterns» (8 паттернов), «How do we retry on failures» (4 стратегии backoff: linear, linear+jitter, exponential, exponential+jitter), «How do we detect node failures in distributed systems» (варианты heartbeat: push/pull, с health-данными, с таймстемпами, с ack, с кворумом). Связка: KB §9 (полная версия с байками DDIA), §11 (лексика).
4.6 Очередь и асинхронная обработка: producer → партиции → consumer group
Рисуем: продюсер → топик с 3–4 партициями → consumer group; рядом — delivery semantics (at-most/at-least/exactly-once) и идемпотентный консьюмер (дедуп по ключу); для full-версии — DLQ.
Когда: любое «а что с пиковой нагрузкой на запись» — буферизуем очередью; фоновые задачи (медиа, нотификации, счётчики). Обязательно проговорить выбор семантики доставки и почему exactly-once дорого.
Референсы: «Types of Message Queues» (критерии выбора), «Delivery Semantics» (три семантики + юзкейсы), «Can Kafka Lose Messages?». Связка: KB §8 (полная версия).
4.7 «Почему Kafka быстрый»: sequential I/O + zero copy
Рисуем: два пути чтения с диска до сетевой карты: без zero-copy (4 копии: диск → OS cache → приложение → socket buffer → NIC) и с zero-copy (sendfile(), мимо приложения). Рядом — append-only запись (sequential I/O).
Когда: deep-dive очередей; это готовый ответ на «почему Kafka, а не RabbitMQ» в части производительности. Заодно демонстрирует знание системного уровня.
Референс: «Why is Kafka fast» (есть в обеих эпохах репо — классика). Связка: KB §8.
4.8 Шардирование: 4 алгоритма + кольцо consistent hashing
Рисуем: таблицу/набор шартов; четыре способа маршрутизации: range (по диапазону ключа), hash (hash(key) % N), consistent hashing (кольцо), virtual buckets (двухуровневая схема bucket → шард). Для кольца — виртуальные ноды и что происходит при добавлении ноды (переезжает только 1/N ключей).
Когда: масштабирование записи; вопрос «что будет при добавлении ноды» — ловушка, на неё и отвечаем кольцом. Простое hash % N → шторм перестроек.
Референсы: «Top 4 Data Sharding Algorithms Explained», «Consistent Hashing Explained» (примеры: DynamoDB, Cassandra, Discord, Akamai CDN). Связка: KB §6 (виртуальные ноды, hot partition), lsd-karanpratapsingh-system-design.md.
4.9 Fan-out ленты: write vs read
Репо подходит к ленте через кейс-стади (Twitter 2012 vs 2022, «For You» за 1.5 с), а не отдельной диаграммой — но именно здесь наш главный кейс. Рисуем: fan-out on write (пуш в ленты подписчиков при твите, кэш-листы в Redis) против fan-out on read (сборка ленты при запросе) и гибрид для аккаунтов-миллионников.
Когда: ядро кейса «инстаграм/твиттер». Детальный разбор — не здесь, а в ../classic-designs.md §2 (эталон уже собран); от репо берём визуальные референсы и аргумент «как у Twitter в реальности» (§6).
4.10 HA-схемы: primary-backup / primary-secondary / primary-primary
Рисуем: три мини-схемы пары нод: backup стоит холодным (ручное переключение), secondary тянет чтения (но лаг → несовместимость данных), primary-primary пишут оба (нужен reconciliation). Рядом — формула «4 девятки = 52.5 мин простоя в год».
Когда: вопрос «что будет, если упадёт БД/зона» — вместо абстрактного «развернём реплики» рисуем конкретную схему и называем цену каждой.
Референс: «How to Design for High Availability». Связка: KB §9 (active-active vs active-passive, арифметика надёжности).
5. Диаграммы тира 2 — второй эшелон (deep-dive и вопросы «а как именно»)
Уметь нарисовать упрощённо по просьбе интервьюера; полностью выучивать не обязательно.
| # | Диаграмма | Что рисуем (суть) | Когда пригодится |
|---|---|---|---|
| 5.1 | Polling / long polling / SSE / WebSocket | 4 способа доставить обновление: клиент спрашивает / сервер держит запрос открытым / односторонний стрим / дуплекс | Мессенджер, чат, нотификации (KB §13.3) |
| 5.2 | Схема чата (ByteByteGo-версия) | WebSocket-соединения, presence service, chat service → sequencing service (ID) → message store → sync queue → push-сервер для офлайн | Кросс-реф к ../classic-designs.md §3: сравнить композицию сервисов с нашим эталоном |
| 5.3 | Push notification system | Сервис нотификаций + очередь + device-гейтвеи (APNs/FCM) + дедуп/батчинг | Лента/чаты: «как уведомим офлайн-пользователя» |
| 5.4 | Unique ID generator | 64 бита: timestamp + ID ноды + секвенция (Snowflake-семейство); требования: глобальная уникальность, примерно сортировка по времени, только числа, масштабируемость | URL shortener, лента, заказы (KB §13.4) |
| 5.5 | CAP-треугольник | Треугольник C/A/P + правильная оговорка: «2 из 3» вводит в заблуждение, реальный трейдофф — PACELC (латентность vs консистентность без партиций) | «Какую консистентность выбираете» — рисуем и сразу уточняем |
| 5.6 | B-tree vs LSM-tree | B-tree: страницы, быстрые чтения; LSM: memtable → SSTable → compaction, быстрые записи; вывод: выбор по read/write-профилю | Выбор хранилища (KB §3, §12 — карта DDIA) |
| 5.7 | 8 структур под БД | Skiplist (Redis), hash index, SSTable, LSM, B-tree, inverted index (Lucene/ES), suffix tree (поиск по строкам), R-tree (гео) | Проверка глубины «а из чего состоит индекс» |
| 5.8 | Forward vs reverse proxy | Кто от кого прячется: прокси защищает клиентов, reverse — серверы (+кэш статики, SSL-терминация, LB) | Терминологический вопрос, бывает в начале секции |
| 5.9 | 6 LB-алгоритмов | Статические: round robin, sticky RR, weighted RR, hash (IP/URL); динамические: least connections, least response time | Рядом с LB на главной схеме (KB §13.2) |
| 5.10 | API gateway по шагам | Запрос: валидация → allow/deny list → аутентификация (identity provider) → rate limit → маршрутизация → трансформация протокола → ошибки/крейс-брейкер → кэш/логи | «Что у нас на входе?» (KB §13, lsd-karanpratapsingh…) |
| 5.11 | HTTP/1.0 → 1.1 → 2.0 → 3.0 | Отдельное TCP-соединение на запрос → keep-alive (HOL на уровне приложения) → мультиплексирование стримов (HOL в TCP) → QUIC/UDP (стримы независимы) | Обоснование выбора HTTP/3 для мобильных; HOL blocking — любимая деталь |
| 5.12 | Стили API: SOAP/REST/GraphQL/gRPC/WebSocket/Webhook | Таблица-сравнение: контракт, транспорт, типовые юзкейсы; webhook = «reverse API», событие вместо опроса | «Как сервисы общаются между собой»: REST + gRPC внутри, webhook для внешних |
| 5.13 | OAuth 2.0 / session vs JWT | Пользователь — сервис — identity provider; токен вместо пароля; сессия (сервер хранит) vs JWT (самодостаточный, подписан) | Вопрос «как аутентифицируем мобильных клиентов» |
| 5.14 | CDC (Change Data Capture) | Транзакционный лог БД → Debezium-коннектор → Kafka → синхронизация кэша/поискового индекса/склада | Элегантный ответ «как держим проекции свежими» вместо двойной записи |
| 5.15 | Saga / CQRS / event sourcing | Последовательность локальных транзакций + компенсации; разделение write/read моделей; состояние = поток событий | Распределённые транзакции без 2PC (KB §7) |
| 5.16 | 4 паттерна eventual consistency | Event-based (события), background sync (фоновая сверка), saga, CQRS-проекции | Продолжение предыдущего: «как живём с лагом» |
| 5.17 | Live streaming (RTMP/HLS/DASH) | Захват → кодек (H.264) → сегменты → adaptive bitrate → CDN edge → плеер; протоколы по устройствам | Медиа-хостинг (../classic-designs.md §4): «а как стрим в реальном времени» |
| 5.18 | Geohash / quadtree | Рекурсивное деление планеты на квадранты, строка-префикс = ячейка; proximity service: business service + location-based service | Гео-вопросы («найди ближайшие…», KB §13.6) |
| 5.19 | 7 классических DS-паттернов | Ambassador, circuit breaker, CQRS, event sourcing, leader election, pub/sub, sharding | Самопроверка словаря: уметь каждому сказать фразу |
6. Кейс-стади — устные аргументы (не рисуем, а рассказываем)
Главная валюта репо для нашей секции: готовые реальные примеры с цифрами, которые вставляются в ответ как «кстати, в реальности…».
| Кейс | Факт | Какой тезис подкрепляет на секции |
|---|---|---|
| Stack Overflow | Весь трафик — 9 on-premise серверов, монолит; «ожидаемое» микросервисное решение провалило бы интервью, но так построено в реальности | Не переусложняем: масштаб определяет архитектуру, а не мода |
| Amazon Prime Video | Мониторинг переехал с serverless (Step Functions + S3 между шагами) на монолит — экономия 90% стоимости | Архитектура = трейдоффы, «не религия» (цитата Werner Vogels); serverless не бесплатен на объёме |
| Discord | Хранение сообщений: MongoDB → Cassandra → ScyllaDB (2022, триллионы сообщений); у Cassandra дорогие чтения (LSM) + compaction + GC-паузы; p99 чтения: 40–125 мс → 15 мс | Хранилище переизбирают по мере роста; LSM быстр на запись, но читает дорого; конкретные p99 — образец «говорим числами» |
| Disney+ Hotstar | 5 млрд emoji за турнир: Go-сервис → Kafka (буфер записи) → Spark-агрегация каждые 2 с → второй Kafka → PubSub (выбрали MQTT из socket.io/NATS/gRPC); аналог — LinkedIn с 1 млн лайков/сек | Буферизуем пики очередью, агрегируем партиями с осознанным трейдоффом интервала |
| Netflix EVCache | Кэш в 4 ролях: lookaside, transient-сессии, primary store для предвычисленных страниц (ночной precompute), high-volume данные (UI-строки) | Кэш бывает не только кэшем: precompute + кэш-как-хранилище для личных страниц |
| Airbnb, 15 лет | Монолит на Rails (2008–2017) → микросервисы (2017–2020, сотни сервисов, хаос зависимостей) → микс микро+макро с унификацией API | Начинаем с монолита, делим по боли — готовый ответ на «почему не микросервисы сразу» |
| Twitter «For You» | Лента рекомендаций за 1.5 с: 500 млн твитов → candidate sourcing → фильтрация (1500) → scoring нейросетью на 48M параметров → фильтрация разнообразия → микс с рекламой | Лента ≠ только fan-out: ML-пайплайн как отдельная архитектура; у нас достаточно назвать стадию «ранжирование сервисом» |
| Twitter 2022 vs 2012 | Одна и та же система за 10 лет: монолит + MySQL → облачные микросервисы | Эволюция архитектуры как норма, а не «спроектировали раз и навсегда» |
7. Как использовать материал под слоты 21/22.09
По индексу (learn-system-design-index.md §4) это P2-материал со сценарием «визуальный повтор по слабым местам из self-review». Конкретный протокол:
- Не читать подряд. Ни 400 гайдов, ни классический README целиком — до секции это запрещено принципом «ничего нового учебного» (index §4).
- После каждого мока/self-review (methodology §6): выписать 2–3 места, где доска «поплыла», и найти соответствующую диаграмму в §4–§5 этого конспекта → перерисовать по памяти → сравнить с оригиналом (ссылки на гайды — по заголовку в
data/guidesили через поиск по репо). - Чек-лист самопроверки на доску (за 60 секунд по памяти + назвать трейдофф): крупноблочная схема (4.1) → кэш-слои (4.2) → репликация (4.4) → отказоустойчивый контур (4.5) → очередь (4.6) → кольцо шардирования (4.8). Шесть схем покрывают 90% нашего формата.
- Кейс-стади из §6 — перечитать вечером перед слотом как список «аргументных карточек»: по одной фразе на кейс.
- Диаграммы рисуются из головы, репо на секции недоступен; поэтому критерий — «воспроизвёл композицию и озвучил трейдофф», а не «запомнил картинку».
8. Уникальное относительно KB — кандидаты для 45.1
Большая часть материала — визуальное зеркало уже собранного (resiliency → KB §9; LB-алгоритмы → §13.2; транспорт → §13.3; ID → §13.4; локи → §13.5; CAP/PACELC → §7; delivery semantics → §8; latency/числа → §1–2). Новое, что стоит забрать в базу знаний:
- 8 индексных структур (skiplist/SSTable/inverted/suffix/R-tree) — расширение KB §3: сейчас классы хранилищ есть, а словарь «из чего состоит индекс» — частично в карте DDIA §12.
- Virtual bucket sharding как 4-й алгоритм шардирования (двухуровневая схема bucket → физический шард; перебалансировка без движения данных) — KB §6.
- CDC как стандартный ответ «как синхронизируем проекции/кэш/индекс» (транзакционный лог → Debezium → Kafka) — в KB упомянут вскользь, а это готовая альтернатива dual-write.
- Heartbeat-варианты (push/pull, с health-данными, с ack, с кворумом) — детализация KB §9 сверх «health checks liveness/readiness».
- «Let it crash» и backpressure как явные пункты списка изоляции — в KB §9 есть 6 из 8 паттернов.
- HA-триада primary-backup / secondary / primary с ценой каждой схемы — переупаковка KB §9 в более говоримые термины.
- Аргументные карточки §6 (Discord p99, Hotstar 2 с, Prime Video −90%, Stack Overflow 9 серверов) — в KB §11 нет готовых «цифр-примеров из реальности»; кандидаты в мини-шпаргалку.
Связанные документы
../knowledge-base.md— §3 (хранилища), §4 (кэш), §6 (шардирование), §8 (очереди), §9 (отказоустойчивость), §11 (шпаргалка), §13 (блоки инфографики)../methodology.md§6 — протокол само-тренировки (сюда встраивается шаг 2 из §7)../classic-designs.md§2–§4 — эталонные разборы ленты/мессенджера/медиа (схемы 4.9, 5.2, 5.17 — визуальные референсы к ним)learn-system-design-index.md— индекс подборки (материал 11, P2)- конспекты соседних материалов:
lsd-karanpratapsingh-system-design.md(45.13),lsd-bregman-notebook.md(45.14),lsd-ultimate-guide-image.md(45.24)