title: Конспект материала 9 — karanpratapsingh/system-design (учебник-репозиторий) source: https://github.com/karanpratapsingh/system-design (один README ~5700 строк; сайт курса karanpratapsingh.com/courses/system-design) author: Karan Pratap Singh; учебник с диаграммами Excalidraw, 5 глав — от основ сети до разборов систем конспект: подготовлено 2026-09-17, TASK-45.13; прочитан полный текст README глав I–V; тезисы — дословная выжимка, формулировки «что проговаривать» — наши дополнения статус: готов к использованию как дополнение к SDP: уникальные темы (типы хранилищ, 2PC/3PC/Sagas, Event Sourcing/CQRS, REST/GraphQL/gRPC, WebSockets/SSE, geohash/quadtree, circuit breaker, rate limiting, SLA/SLO/SLI, RTO/RPO, OAuth/OIDC/SSO/mTLS, разборы Twitter/Netflix/Uber) размечены для переноса в KB §3–§10/§13–§14
Материал 9: karanpratapsingh/system-design — учебник-репозиторий
Структурированный курс по системному дизайну, оформленный как один большой README: сетевые основы → базы данных → архитектурные паттерны → инфраструктурные практики → разборы пяти классических систем (URL shortener, WhatsApp, Twitter, Netflix, Uber). По отношению к нашей подготовке:
- System Design Primer (
sdp-guide.md, TASK-45.7) — это «словарь паттернов» с обязательным блоком Disadvantages. - Этот курс — «линейный учебник с разбором систем» как у Alex Xu; хорошо дополняет SDP деталями, которых в primer нет.
- Приоритет из
learn-system-design-index.md: P3, ключевые главы (разборы + распределённые транзакции/реал-тайм транспорт/геоданные) — P2.
Как читать этот конспект: секции 1–4 — быстрый словарь по главам I–IV; секция 5 — фреймворк интервью из главы V; секция 6 — разборы пяти систем с числами и ключевыми решениями; секция 7 — темы, уникальные относительно SDP, с маппингом в базу знаний; секция 8 — сценарии использования.
1. Глава I — Основы: сеть, доступность, масштабирование, хранение
1.1 Сеть (IP, OSI, TCP/UDP, DNS, прокси)
- IP — логический адрес устройства в сети; DNS превращает домен в IP через цепочку root → TLD → authoritative NS, с кэшированием на каждом уровне по TTL.
- OSI — семь уровней абстракции; на собеседовании достаточно проговорить, что HTTP работает поверх TCP (L4), TLS — L6/L7, а Ethernet — L2.
- TCP — надёжная доставка с установлением соединения, порядком и контролем потерь; UDP — быстрый, без гарантий, хорош для стриминга/ real-time.
- Reverse proxy — стоит перед серверами, защищает и балансирует; forward proxy — перед клиентом, часто используется для анонимизации/контроля доступа.
Маппинг: вся эта часть уже покрыта
knowledge-base.md§13.1 иsdp-guide.md§4 — повторяем только если нужно освежить терминологию.
1.2 Балансировка и кластеризация
- Load balancer распределяет трафик между нодами; в курсе упоминаются Round Robin, Weighted Round Robin, Least Connections, IP-hash (sticky sessions).
- Sticky sessions полезны, когда состояние хранится локально на ноде, но лучше стремиться к stateless-бэкендам и выносить состояние в Redis/БД.
- Clustering — группировка серверов под общим узлом; horizontal scaling = добавление машин, vertical scaling = увеличение ресурсов одной машины. Маппинг: LB-алгоритмы и sticky sessions уже в KB §13.2; разница только в формулировках.
1.3 Кэш и CDN
- Кэширование ускоряет чтение и снижает нагрузку на БД; основные паттерны: cache-aside, write-through, write-around, write-back.
- CDN — распределённая сеть краевых узлов для статики; работает в режимах push (горячий контент проталкиваем), pull (по промаху) и hybrid.
- LRU — рабочая политика вытеснения для большинства сценариев; на секции говорить: «кэшируем горячее, вытесняем редкое». Маппинг: кэш-паттерны есть в SDP; CDN подробнее разобран в KB §13.8 (push/pull/hybrid).
1.4 Доступность и масштабируемость
- Availability измеряется «девятками»: 99 % = 3.65 дня простоя/год, 99.9 % = 8.76 ч, 99.99 % = 52.6 мин, 99.999 % = 5.26 мин.
- High availability обычно достигается избыточностью: несколько инстансов сервисов, read-реплики БД, реплики кэша, несколько ДЦ.
- Scalability — способность системы расти под нагрузку; горизонтальное масштабирование предпочтительнее, потому что дешевле и устраняет единую точку отказа. Маппинг: числа «девяток» и trade-off масштабирования есть в KB §9/§10 и SDP §11.
1.5 Типы хранилищ (block, file, object, HDFS) — уникально vs SDP
- Block storage — сырой доступ к блочным устройствам (SSD/HDD), используется базами данных и файловыми системами; низкий уровень, высокая производительность.
- File storage — иерархия файлов и папок с общим доступом по сети (NFS/SMB); хорош для офисных/legacy-сценариев, плохо масштабируется.
- Object storage — плоское хранилище объектов (ключ → blob + метаданные); масштабируемо, дешево, идеально для медиа/бэкапов (S3, MinIO, GCS).
- HDFS — распределённая файловая система для batch-аналитики; оптимизирована под большие файлы и последовательное чтение, а не произвольный доступ.
- Куда в KB: дополнить
knowledge-base.md§3 «Классы хранилищ и критерии выбора» — в текущей версии есть LSM/B-tree, но нет четырёх уровней абстракции хранения.
2. Глава II — Базы данных
2.1 SQL vs NoSQL и таксономия NoSQL
- SQL — реляционные БД с ACID, схемой и JOIN; хороши для структурированных данных со сложными связями.
- NoSQL — четыре большие группы: key-value (Redis, DynamoDB), document (MongoDB), wide-column (Cassandra, HBase), graph (Neo4j).
- Выбор между SQL и NoSQL — не вопрос моды, а вопрос структуры данных, требований к консистентности и масштабированию записи. Маппинг: таксономия уже есть в KB §3 и SDP §6; здесь больше иллюстраций и названий.
2.2 Репликация, индексы и нормализация
- Репликация повышает отказоустойчивость и масштабирует чтение; модели: master-slave (async/sync), master-master, каскадная.
- Индексы ускоряют чтение за счёт замедления записи; B-tree — универсальный, hash — точное совпадение, clustered — физический порядок строк.
- Нормализация убирает избыточность (1NF–3NF/BCNF); денормализация добавляет избыточность ради скорости чтения — типичный trade-off высоконагруженных систем. Маппинг: индексы и нормальные формы не разбираются в SDP; стоит добавить в KB §3.1/§6 как «DB internals для секции».
2.3 ACID, BASE и транзакции
- ACID — атомарность, консистентность, изолированность, долговечность; стандарт реляционных баз.
- BASE — Basically Available, Soft state, Eventual consistency; модель NoSQL под высокую доступность и partition tolerance.
- Уровни изоляции от младшего к старшему: read uncommitted → read committed → repeatable read → serializable; чем выше, тем медленнее. Маппинг: ACID/BASE и уровни изоляции уже в KB §7 (с подробностями из DDIA); здесь компактное повторение.
2.4 CAP и PACELC
- CAP: при сетевом разделении (P — неизбежно) выбираем между C (консистентность) и A (доступность); в одном ДЦ обычно C, между ДЦ — AP с eventual consistency.
- PACELC мягче CAP: даже без разделения (Else) выбираем между Latency и Consistency; строгая консистентность стоит дополнительного round-trip.
- Практический вывод: большинство web-систем живут в AP с eventual consistency и асинхронной сверкой; строгую CP-зону оставляют деньгам/остаткам, где отдать неверное дороже, чем молчать. Маппинг: PACELC уже упомянут в SDP и развёрнут в KB §7; курс даёт только короткую, но чёткую формулировку.
2.5 Распределённые транзакции: 2PC, 3PC, Saga — уникально vs SDP
- 2PC (Two-Phase Commit): фаза prepare → фаза commit; даёт атомарность, но координатор — точка блокировки и отказа; непопулярен в высоконагруженных системах.
- 3PC добавляет фазу pre-commit и таймауты, чтобы уменьшить блокировки, но усложняет протокол и не устраняет все краевые случаи.
- Saga — последовательность локальных транзакций с компенсациями; оркестрация (центральный координатор) vs хореография (события между сервисами); выбор для микросервисов.
- Transactional outbox (упоминается в связке): событие пишется в таблицу outbox в той же транзакции, воркер/CDC отправляет в Kafka — надёжная публикация. Маппинг: KB §7 уже содержит 2PC/Saga/outbox; курс добавляет 3PC и короткую интуицию — можно использовать как дополнительную цитату.
2.6 Шардирование, консистентное хэширование и федерация
- Шардирование разбивает данные по нескольким нодам; схемы: hash-based, list-based, range-based, composite.
- Consistent hashing снижает перешардирование при добавлении/удалении нод: теряем только
1/nключей вместо почти всех. - Federation (функциональный/вертикальный шард) — разделение по таблицам/сервисам, а не по строкам; первый шаг перед горизонтальным шардированием. Маппинг: шардирование и consistent hashing есть в SDP и KB §6; federation — небольшое дополнение.
3. Глава III — Архитектурные паттерны
3.1 N-tier, монолит и микросервисы
- N-tier — классическое разделение на presentation / application / data tier; просто, но плохо масштабируется независимо.
- Монолит — единый деплойный артефакт; быстрая разработка на старте, но сложный рост команды и независимого масштабирования.
- Микросервисы — сервисы с собственной бизнес-способностью и БД; цена — network latency, distributed complexity, observability. Маппинг: монолит/микросервисы разобраны в SDP §5; N-tier — дополнение, полезное для формулировки «почему не трёхзвенка».
3.2 Очереди, брокеры, pub-sub, ESB, EDA
- Message queues (Kafka, RabbitMQ, SQS) развязывают (decouple) отправителя и получателя; гарантируют durability, часто at-least-once доставку.
- Pub-sub — один продюсер, много консьюмеров; хорошо для уведомлений, лент, fan-out событий.
- ESB (Enterprise Service Bus) — центральная шина маршрутизации/трансформации сообщений между сервисами; увеличивает coupling, уступает место лёгким event-брокерам.
- EDA (Event-Driven Architecture) — сервисы реагируют на события, а не синхронно вызывают друг друга; плюс — слабое связывание, минус — сложность отладки и ordering. Маппинг: ESB/EDA почти не разбираются в SDP; стоит добавить в KB §8/§10 как паттерны интеграции.
3.3 Event Sourcing и CQRS — уникально vs SDP
- Event Sourcing: состояние приложения хранится не как текущий срез, а как неизменяемый лог событий; источник правды — события, срезы можно строить повторно.
- CQRS (Command Query Responsibility Segregation): модели записи и чтения разделены; команды изменяют агрегат, запросы читают оптимизированные projections.
- Event Sourcing + CQRS часто идут вместе, но не обязаны; плата — сложность схемы, версионирование событий, необходимость snapshot'ов.
- Когда применять: финансовые аудит-логи, сложные домены с требованием «перемотать состояние». Маппинг: темы отсутствуют в SDP и в KB; добавить в KB §10 «Паттерны надёжности и сложных доменов» или отдельный §.
3.4 API Gateway и BFF
- API Gateway — единая точка входа: TLS termination, auth, rate limiting, routing, request/response transformation, caching.
- BFF (Backend for Frontend) — отдельный бэкенд под конкретный клиент (web/mobile/TV), который агрегирует вызовы к микросервисам.
- Gateway решает cross-cutting concerns; BFF решает разницу в потребностях клиентов; иногда совмещаются. Маппинг: API Gateway уже в KB §13.8; BFF — дополнение к шлюзу.
3.5 REST, GraphQL и gRPC — уникально vs SDP
- REST — ресурсный HTTP-стиль, простой и универсальный; плюс — кэширование и человекочитаемость, минус — over-fetching/under-fetching.
- GraphQL — клиент запрашивает ровно нужные поля; плюс — гибкость фронтенда, минус — сложность кэширования, N+1 запросы, rate limiting.
- gRPC — бинарный RPC поверх HTTP/2 с protobuf; плюс — высокая производительность и контракты, минус — меньшее удобство для браузеров.
- На секции: внешние API — REST/GraphQL, межсервисный трафик — gRPC; WebSocket/gRPC streaming — для real-time. Маппинг: SDP §9 сравнивает HTTP и RPC, но не GraphQL; добавить в KB §10/§13.7 как выбор протокола.
3.6 Real-time транспорт: long polling, WebSockets, SSE — уникально vs SDP
- Long polling — клиент держит HTTP-соединение открытым, пока сервер не пришлёт данные; простой, но накладные ресурсы на поддержание множества висящих соединений.
- WebSockets — полнодуплексное соединение после handshake; лучший выбор для мессенджеров, коллаборативных редакторов, live-обновлений.
- SSE (Server-Sent Events) — однонаправленный сервер → клиент поверх HTTP; проще WebSocket, хорош для лент/нотификаций; авто-reconnect и совместимость с HTTP-инфраструктурой. Маппинг: уже есть в KB §13.3 в виде таблицы; курс — дополнительный источник формулировок.
4. Глава IV — Практика: геоданные, отказоустойчивость, security, эксплуатация
4.1 Geohashing и Quadtrees — уникально vs SDP
- Geohash — кодирование lat/long в Base-32 строку; иерархический префикс позволяет искать «ближайшие» сравнением строк (например, Сан-Франциско →
9q8yy9mf). - Quadtree — рекурсивное разбиение 2D-пространства на 4 квадранта; листья хранят объекты, внутренние узлы — границы; идеален для range-запросов «объекты внутри прямоугольника».
- Практика Uber: хранить последние позиции водителей в памяти (Redis) + перестраивать Quadtree при обновлении; Hilbert-кривая помогает эффективным range-запросам. Маппинг: KB §13.6 упоминает geohash/Quadtree/R-деревья; курс даёт детали, которые стоит туда добавить.
4.2 Circuit breaker — уникально vs SDP
- Circuit breaker защищает от каскадных отказов: Closed (норма) → Open (отказ, быстрый reject) → Half-Open (пробный запрос).
- Вместо того чтобы «зависать» на упавшей зависимости, клиент получает быстрый fallback и не исчерпывает пул соединений.
- Параметры: порог ошибок, таймаут окна, cooldown до half-open, monitored rolling window. Маппинг: в KB §9 есть timeouts/retries/backpressure, но circuit breaker не выделен; добавить как обязательный паттерн отказоустойчивости.
4.3 Rate limiting: алгоритмы — уникально vs SDP
- Token bucket — равномерное пополнение токенов; подходит для burst-трафика с ограничением средней скорости.
- Leaky bucket — фиксированная скорость выхода; сглаживает пики, но может задерживать допустимые burst'ы.
- Fixed window — простой счётчик в интервале; проблема «пик на границе окна».
- Sliding window log / counter — точнее, но дороже по памяти; sliding window log хранит timestamps, counter — аппроксимация. Маппинг: KB §14.1 уже разбирает алгоритмы на основе Alex Xu; курс — дополнительная выжимка для повторения.
4.4 Service discovery
- Сервисы в динамическом окружении регистрируются в service registry (Consul, Eureka, ZooKeeper, etcd); клиенты запрашивают адрес перед вызовом.
- Два подхода: client-side discovery (клиент сам ходит в registry) и server-side discovery (через LB/gateway).
- Registry автоматически выкидывает нездоровые инстансы по health checks/TTL; в Kubernetes сервис-дискавери встроено (Service + DNS + readiness probes). Маппинг: уже покрыто SDP §5 и KB §10; здесь только контекст в разборе систем.
4.5 SLA, SLO, SLI — уникально vs SDP
- SLA (Service Level Agreement) — внешнее обещание перед пользователями/клиентами; нарушение = штрафы/компенсации.
- SLO (Service Level Objective) — внутренняя цель, которую команда ставит себе, чтобы не нарушить SLA с запасом.
- SLI (Service Level Indicator) — конкретная метрика (latency p99, availability, error rate, throughput), по которой измеряем SLO.
- Формула для секции: «SLI → SLO → SLA; SLO всегда строже SLA, чтобы оставался буфер». Маппинг: отсутствует в SDP; добавить в KB §10 «Эксплуатация».
4.6 Disaster recovery: RTO и RPO — уникально vs SDP
- RTO (Recovery Time Objective) — максимально допустимое время простоя после аварии; определяет горячий/тёплый/холодный standby.
- RPO (Recovery Point Objective) — максимально допустимая потеря данных; определяет частоту бэкапов/репликации.
- Стратегии: backup & restore (длинный RTO/RPO), pilot light, warm standby, hot standby/multi-site active-active. Маппинг: отсутствует в SDP; добавить в KB §9/§10 как язык отказоустойчивости.
4.7 Виртуализация и контейнеризация
- VM — полная изоляция ОС, тяжелее по ресурсам, запуск в минуты; контейнеры — shared kernel, лёгкие, запуск в секунды.
- Kubernetes/orchestrators решают вопросы масштабирования, rolling update, самовосстановления и service discovery.
- Когда что выбирать: контейнеры — стандарт для микросервисов и CI/CD (быстрый деплой, плотность упаковки); VM — когда нужна жёсткая изоляция или legacy-стек. Маппинг: высокоуровневое повторение; в KB не нужно дублировать.
4.8 Security: OAuth 2.0, OIDC, SSO, mTLS — уникально vs SDP
- OAuth 2.0 — делегированный доступ: клиент получает access token от authorization server, ресурсный сервер проверяет его.
- OIDC — слой идентификации поверх OAuth 2.0; возвращает ID token (JWT) с claims о пользователе.
- SSO — единый вход через центральный IdP; удобство для пользователей, но IdP становится критичной точкой.
- mTLS — взаимная TLS-аутентификация сервисов; стандарт для zero-trust в микросервисах. Маппинг: KB §13.7 упоминает OAuth 2.0/JWT; OIDC/SSO/mTLS — расширение security-блока.
5. Глава V — Фреймворк системного дизайна
Автор предлагает 4 шага, которые затем повторяются в каждом разборе системы. Это западный каркас; сверка с methodology.md §1:
| Шаг Karan Pratap Singh | Эквивалент в methodology.md | Что делать |
|---|---|---|
| 1. Requirements clarification | Этап 1. Уточнение задачи | Собрать functional / non-functional / extended requirements; зафиксировать масштаб |
| 2. Back-of-envelope estimation | Этап 2. Оценки (часть) | Посчитать DAU, RPS, storage, bandwidth; показать, что понимаем масштаб |
| 3. High-level design | Этап 2–3. API, data model, architecture | Нарисовать блоки, назвать сервисы, обосновать выбор БД/кэша/очереди |
| 4. Detailed design + bottlenecks | Этап 4–5. Детали и эксплуатация | Deep dive: шардирование, кэш, real-time, масштабирование; в конце — bottlenecks и trade-off'ы |
Ключевые тезисы:
- «Не молчи и не рисуй схему без контекста» — на каждом шаге нужно объяснять интервьюеру, почему выбран именно этот компонент.
- Оценки — это не точная наука, а проверка масштаба: RPS, storage и bandwidth нужны, чтобы показать, что мы понимаем нагрузку, а не для точного числа.
- Единый шаблон разбора позволяет не теряться: сначала требования, потом цифры, потом схема, потом детали.
Маппинг: фреймворк уже отражён в
methodology.md§1; этот курс — дополнительная иллюстрация из устного стиля.
6. Разборы систем: общий шаблон и что в них есть
Все пять разборов (URL Shortener, WhatsApp, Twitter, Netflix, Uber) следуют одному шаблону:
- Requirements (functional / non-functional / extended)
- Estimation (DAU, RPS, storage/day, storage/10y, bandwidth)
- Data model (таблицы / NoSQL-решения)
- API design (методы и параметры)
- High-level design (сервисы, связи, кэш, очереди)
- Detailed design (шардирование, кэш, real-time, безопасность)
- Bottlenecks (single points of failure, LB, реплики, кэш-реплики, messaging)
Ниже — готовые «заготовки для секции»: масштабные цифры и ключевые решения, которые можно быстро вспомнить перед слотом.
6.1 URL Shortener
- Масштаб: 100M новых URL/месяц → 40 writes/s, 100:1 read/write → 4K reads/s; 6TB storage за 10 лет; 35GB кэша на 20% hot reads.
- Ключ генерации: base62 даёт 62^7 ≈ 3.5T комбинаций; MD5 страдает коллизиями; лучше — Key Generation Service (KGS) с предварительно сгенерированными ключами (два пула: available / used).
- Архитектура: API → KGS → write DB + cache; read идёт сначала в cache, при miss — в БД, затем 301 redirect.
- Масштабирование и extended: шардирование по hash/range + consistent hashing, LRU-кэш; expired-ссылки — active (cron-cleanup) или passive (по обращению); API key для rate limiting, таблица permissions для private URL, метрики просмотров (страна, платформа).
Маппинг: URL shortener — эталон
classic-designs.md§1 иknowledge-base.md§2.2; курс добавляет детали KGS и cleanup.
6.2 WhatsApp
- Масштаб: 50M DAU × 40 сообщений = 2B сообщений/день → 24K RPS; 5% медиа → 100M файлов/день; 10.2TB/день, 38PB/10лет; bandwidth 120MB/s.
- Сервисы: User Service (HTTP), Chat Service (WebSockets + cache активных сессий), Notification Service, Presence Service (last seen), Media Service.
- Real-time и presence: WebSocket — полнодуплекс, минимальная latency (long polling — fallback с лишней нагрузкой; SSE не подходит — нужен duplex); last seen — heartbeat или lazy update по последнему действию, хранение
userId → timestampв Redis/Memcached. - Notifications: если получатель offline — событие в очередь (Kafka/SQS/RabbitMQ); Notification Service шлёт через FCM/APNS; очередь даёт ordering и at-least-once.
- Read receipts: доставка —
deliveredAtпосле ACK от клиента; прочитано —seenAtпри открытии чата. Маппинг: мессенджер разобран вclassic-designs.md§3; курс даёт готовые API и выбор real-time транспорта.
6.3 Twitter
- Масштаб: 200M DAU × 5 твитов = 1B твитов/день → 12K RPS; 10% медиа → 100M файлов/день; ~5.1TB/день, ~19PB/10лет; bandwidth ~60MB/s. (В курсе есть опечатка: в тексте DAU 200M, в summary-таблице 100M; на секции согласовываем с интервьюером.)
- Сервисы и social graph: User, Tweet, Newsfeed, Search, Media, Notification, Analytics; mutual friends/рекомендации — графовая БД (Neo4j/ArangoDB) + ML.
- Лента: три модели — pull (fan-out on read, меньше writes, но высокая latency), push (fan-out on write, быстрое чтение, но взрыв writes для знаменитостей), hybrid (push для обычных, pull для знаменитостей).
- Ranking и retweets: классический EdgeRank —
Rank = Affinity × Weight × Decay, сейчас ML-модели; ретвит — запись сtype = tweetиcontent = originalTweetID(или отдельная таблица). - Search/Trending: Elasticsearch для полнотекста; trending — кэш частых запросов/hashtags с пересчётом batch-job; аналитика — Spark.
Маппинг: лента новостей — эталон
classic-designs.md§2; курс добавляет push/pull/hybrid и EdgeRank.
6.4 Netflix
- Масштаб: 200M DAU × 5 видео = 1B просмотров/день; read/write 200:1 → 5M uploads/день; 12K RPS; 500TB/день, ~1825PB/10лет; bandwidth 5.8GB/s.
- Pipeline обработки видео: File Chunker (Netflix — по сценам, не по timestamps) → Content Filter (ML: copyright/NSFW, DLQ) → Transcoder (FFmpeg/MediaConvert) → Quality Conversion (4K/1440p/1080p/720p) → object storage (S3).
- Стриминг: CDN + Netflix Open Connect (OCA-устройства у ISP, 95% трафика, failover на серверы Netflix); adaptive bitrate через HLS/DASH; resume —
offsetизviews. - Поиск, рекомендации, geo-blocking: Elasticsearch для поиска; collaborative filtering + собственный движок (профиль, поведение, устройство, время, запросы); локация по IP/настройкам + CloudFront geo restrictions или Route53 geolocation routing.
Маппинг: медиа-хостинг — эталон
classic-designs.md§4; курс добавляет Open Connect, scene-based chunking и video pipeline.
6.5 Uber
- Масштаб и сервисы: 100M DAU, 1M водителей, 10M поездок/день; 10 действий/пользователя → 1B запросов/день → 12K RPS; 400GB/день, 1.4PB/10лет; bandwidth 5MB/s; сервисы — Customer, Driver, Ride (matching + quadtree), Trip, Payment, Notification, Analytics.
- Real-time location: WebSocket — лучший выбор (full-duplex, низкая latency); SSE — только сервер→клиент; long polling — fallback с избыточной нагрузкой; фоновое обновление GPS, когда приложение свёрнуто.
- Ride matching: SQL box-запрос не масштабируется → geohash (Base-32, иерархический префикс) → Quadtree (рекурсивное 2D-разбиение, обновление в памяти, Redis-кэш, Hilbert curve для range queries).
- Race conditions, ranking, surge: подбор под mutex, каждое действие — транзакция; после подбора — ranking водителей по рейтингу/отзывам; при высоком спросе — surge pricing (динамическое повышение цены).
- Payments, notifications, bottlenecks: внешний процессор (Stripe/PayPal) + webhook + idempotency key; уведомления через Kafka/NATS (ordering, at-least-once); отказоустойчивость — инстансы сервисов, LB, read-реплики БД, реплики кэша.
Маппинг: Uber — не разобран в
classic-designs.md, ближайший аналог — гео/карты из KB §13.6; курс даёт полный разбор для западного интервью.
7. Уникальное относительно System Design Primer — карта для переноса в KB
Ниже темы, которые в sdp-guide.md (и в исходном primer) либо отсутствуют, либо даны существенно короче. Для каждой указано: где в этом конспекте, куда в knowledge-base.md идёт перенос, и есть ли там уже заготовка.
| Тема | В этом конспекте | Целевой раздел KB | Покрытие в KB сейчас |
|---|---|---|---|
| Типы хранилищ (block / file / object / HDFS) | §1.5 | §3 «Классы хранилищ и критерии выбора» | Частично: есть LSM/B-tree, но нет четырёх уровней абстракции. Добавить. |
| Индексы (B-tree, hash, clustered) и нормальные формы | §2.2 | §3.1 «Движки хранения» / §6 «Шардирование» | Нет. Добавить как «DB internals для секции». |
| 2PC / 3PC / Sagas + transactional outbox | §2.5 | §7 «Консистентность и распределённые транзакции» | Уже есть 2PC/Saga/outbox; 3PC и короткая интуиция — дополнить. |
| Event Sourcing и CQRS | §3.3 | §10 «Отказоустойчивость» или новый §«Паттерны сложных доменов» | Нет. Добавить. |
| ESB / EDA | §3.2 | §8 «Очереди и потоковая обработка» / §10 | EDA упомянуто обрывками; ESB — нет. Дополнить. |
| REST / GraphQL / gRPC — сравнение | §3.5 | §13.7 / §10 | GraphQL не разобран. Добавить. |
| Long polling / WebSockets / SSE | §3.6 | §13.3 «Real-time транспорт» | Уже есть таблица; использовать курс как дополнительную формулировку. |
| BFF (Backend for Frontend) | §3.4 | §13.8 / §10 | Нет. Добавить. |
| Geohashing и Quadtrees | §4.1 / §6.5 | §13.6 «Гео-шардирование и пространственные данные» | Есть упоминание; детали Base-32, Hilbert, обновление в памяти — дополнить. |
| Circuit breaker | §4.2 | §9 «Отказоустойчивость» | Нет. Добавить. |
| Алгоритмы rate limiting | §4.3 | §14.1 (Alex Xu Vol. 1) | Уже разобраны; курс — дополнительная тренировка. |
| SLA / SLO / SLI | §4.5 | §10 «Эксплуатация» | Нет. Добавить. |
| RTO / RPO и стратегии DR | §4.6 | §9 / §10 | Нет. Добавить. |
| OAuth 2.0 / OIDC / SSO / mTLS | §4.8 | §13.7 | OAuth 2.0/JWT есть; OIDC/SSO/mTLS — дополнить. |
| N-tier architecture | §3.1 | §10 / §11 | Нет прямого упоминания; добавить как антипаттерн при масштабировании. |
| Разборы Twitter, Netflix, Uber | §6.3–6.5 | classic-designs.md + KB §11 «что назвать на секции» |
Twitter/медиа-хостинг есть; Uber — нет. Добавить Uber как пример гео-системы. |
Что НЕ уникально vs SDP (и не требует переноса):
- Сеть (IP, DNS, TCP/UDP, прокси) — SDP §4, KB §13.1.
- LB-алгоритмы, sticky sessions — SDP, KB §13.2.
- Кэш-паттерны и CDN — SDP, KB §4/§13.8.
- Доступность «девятками», horizontal/vertical scaling — SDP §11, KB §9/§10.
- SQL vs NoSQL, репликация, шардирование, consistent hashing — SDP §6, KB §5/§6.
- ACID/BASE, CAP/PACELC — SDP §3, KB §7.
- Service discovery — SDP §5, KB §10.
- API Gateway — SDP/инфографика, KB §13.8.
- Message queues / pub-sub — SDP §8, KB §8.
- Монолит vs микросервисы — SDP §5.
8. Как использовать в подготовке
- Если осталось <2 часов до секции: пробежать §6 (разборы систем) и §7 (уникальные темы) — быстро вспомнить числа и ключевые слова.
- Если 1–2 дня: перечитать §2.5 (2PC/3PC/Saga), §3.3 (Event Sourcing/CQRS), §3.5–3.6 (REST/GraphQL/gRPC/WebSockets/SSE), §4.1 (geohash/quadtree) — темы, которые могут встретиться в вопросах «а что ещё знаешь?».
- Если есть время на глубину: сверять каждый разбор с
classic-designs.mdиknowledge-base.md, чтобы ответы звучали в рамках нашего фреймворка (methodology.md§1), а не как список фактов. - Что брать на доску: цифры из разборов (RPS/storage/bandwidth), push/pull/hybrid для лент, scene-based chunking для видео, Quadtree/geohash для гео, circuit breaker + rate limiting для отказоустойчивости.
Связанные документы
learn-system-design-index.md— индекс подборки learn-system-design, откуда взят этот материал (TASK-45.12)sdp-guide.md— System Design Primer, основной гайд (TASK-45.7)../knowledge-base.md— база знаний; целевые разделы для переноса уникальных тем — в таблице §7 этого конспекта../methodology.md— методичка секции; фреймворк из главы V сверяется с §1../classic-designs.md— эталонные разборы URL shortener, ленты, мессенджера и медиа-хостинга../brief.md— бриф из 12 разделов; помогает проверить, что все темы из курса укладываются в программу