Job 2026 md

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». Три режима использования перед секцией:

  1. Референс для доски. Перед тренировкой схемы открыть соответствующую диаграмму, перерисовать по памяти, сравнить. Чужая композиция подсказывает, что рисовать в каком порядке и какими блоками (§4–§5).
  2. Словарь самопроверки. Пройтись по заголовкам гайдов как по чек-листу: «могу ли я на доске за минуту объяснить этот концепт?» — где «нет», там и повторять (§3).
  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». Конкретный протокол:

  1. Не читать подряд. Ни 400 гайдов, ни классический README целиком — до секции это запрещено принципом «ничего нового учебного» (index §4).
  2. После каждого мока/self-review (methodology §6): выписать 2–3 места, где доска «поплыла», и найти соответствующую диаграмму в §4–§5 этого конспекта → перерисовать по памяти → сравнить с оригиналом (ссылки на гайды — по заголовку в data/guides или через поиск по репо).
  3. Чек-лист самопроверки на доску (за 60 секунд по памяти + назвать трейдофф): крупноблочная схема (4.1) → кэш-слои (4.2) → репликация (4.4) → отказоустойчивый контур (4.5) → очередь (4.6) → кольцо шардирования (4.8). Шесть схем покрывают 90% нашего формата.
  4. Кейс-стади из §6 — перечитать вечером перед слотом как список «аргументных карточек»: по одной фразе на кейс.
  5. Диаграммы рисуются из головы, репо на секции недоступен; поэтому критерий — «воспроизвёл композицию и озвучил трейдофф», а не «запомнил картинку».

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)