Job 2026 md

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) следуют одному шаблону:

  1. Requirements (functional / non-functional / extended)
  2. Estimation (DAU, RPS, storage/day, storage/10y, bandwidth)
  3. Data model (таблицы / NoSQL-решения)
  4. API design (методы и параметры)
  5. High-level design (сервисы, связи, кэш, очереди)
  6. Detailed design (шардирование, кэш, real-time, безопасность)
  7. 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 разделов; помогает проверить, что все темы из курса укладываются в программу