---
title: Конспект материала 10 — bregman-arie/system-design-notebook
source: https://github.com/bregman-arie/system-design-notebook
author: Arie Bregman
конспект: подготовлено 2026-09-18, TASK-45.14; прочитаны все 13 md-файлов репо (~1900 строк текста); репо заявлено автором как work-in-progress — много разделов пустые/TODO
статус: P3-источник: ценность сосредоточена в упражнениях (особенно AWS-цепочка и stateful-сессии) и нескольких компактных тематических карточках; уникальные микрофакты — см. §6
---

# Материал 10: system-design-notebook — пошаговые карточки + упражнения

Репо позиционируется как «step-by-step» обучение System Design. Формат: визуальный индекс тем в корневом README + маленькие страницы по каждой теме + большой блок упражнений/вопросов + несколько разборов систем. Важный нюанс: **автор прямо пишет, что проект незавершён**, и это видно — многие заголовки внутри тем (Consistent Hashing, Sticky Sessions, Health Checks, System Design Process, разборы WhatsApp/Prime Video) помечены TODO или пусты. Поэтому читать нужно выборочно: упражнения и 4–5 заполненных тем.

---

## 1. Структура репо

| Блок | Что внутри | Полезность |
|---|---|---|
| Тематические карточки | Requirements, Basic Architecture, Networking, DNS, Load Balancer, Scalability, Reliability Engineering, API Gateway, Databases, Distributed Systems | Средняя: определения базовые, но есть удачные формулировки (см. §3) |
| Exercises / General | ~12 ситуаций «вот схема — найди проблемы и улучши» | Высокая: хороши для самопроверки перед моками |
| Exercises / AWS Cloud | Две цепочки: stateless «What time is it?» и stateful «Video Games Shop» | Высокая: показывает эволюцию архитектуры от одного инстанса до multi-AZ |
| Questions | Упрощённые вопросы для самопроверки | Средняя; многие без ответов |
| System Designs | Big-Scale Monorepo, Parking & Reservation, WhatsApp, Amazon Prime Video | Первая две — полноценны, последние две — только требования/NFR |
| Interview Tips | Короткий чек-лист вопросов к себе и интервьюеру | Подтверждает methodology.md §1 |

---

## 2. Тематические карточки — ключевые тезисы

### 2.1 Requirements

- **Functional Requirements** — что система должна делать (функции/поведение). Пример для мессенджера: отправка и получение сообщений.
- **Non-Functional Requirements** — как система это делает (производительность, доступность, надёжность). Пример: zero downtime, no data loss.
- Начинать дизайн с требований — это способ зафиксировать границы и не уйти в оверинжиниринг.

*Маппинг: полностью покрыто methodology.md §1 (FR/NFR + вопросы-уточнения).*

### 2.2 Basic Architecture: клиент, сервер, типы серверов

- **Client** — любое ПО/устройство, запрашивающее ресурс/сервис у сервера.
- **Server** — ПО/железо, предоставляющее ресурс/сервис.
- **Bare Metal** — физический сервер, обычно выделенный под одного заказчика/проект.
- **Virtual Server** — сервер, поднятый на гипервизоре/облаке.

*Маппинг: базовые определения; не требует переноса в KB.*

### 2.3 Networking

- **Public IP** — для компонентов, к которым обращаются извне (LB, gateway, публичный веб-сервер).
- **Private IP** — для внутренних компонентов, не доступных глобально (бэкенды за LB, внутренние сервисы).
- **Latency** — время выполнения одного действия; **Throughput** — число действий в единицу времени.
- **L1 cache reference ≈ 0.5 нс, L2 ≈ 7 нс** — разница в 14×.

*Маппинг: latency numbers уже в KB §1.2; public/private IP — в §13.1/§13.8.*

### 2.4 DNS

- Главная задача — преобразование доменного имени в IP (и обратно).
- DNS можно использовать для балансировки нагрузки через **round-robin** записи.
- **Подводный камень round-robin DNS**: запись кэшируется с TTL; если нода упала, клиенты продолжают стучаться в мёртвый IP до истечения TTL. ELB/ALB решают проблему.

*Маппинг: TTL упомянут в KB §13.1, но питфолл round-robin-as-LB — нет. См. §6.*

### 2.5 Load Balancer

- Распределяет задачи по ресурсам; LB — публичный IP, бэкенды — приватные.
- Перечислены 9 техник: Round Robin, Weighted RR, Least Connection, Weighted Least Connection, Resource Based, Fixed Weighting, Weighted Response Time, Source IP Hash, URL Hash.
- **Недостатки Round Robin**: не знает веса запросов и мощности серверов (может свалить тяжёлые запросы на одну ноду); каждый запрос — новая сессия, плохо для stateful-сценариев.
- **Health checks** исключают нездоровые ноды из ротации.
- Для e-commerce рекомендуется техника со sticky sessions (если состояние не вынесено в общее хранилище).

*Маппинг: §13.2 KB покрывает RR/WRR/Least Connections/Hash/Random; см. §6 про дополнение.*

### 2.6 Scalability

- **Vertical Scaling** — наращивание ресурсов существующей ноды (RAM/CPU/диск). Просто, но есть физический потолок и простой при апгрейде; оставляет SPOF.
- **Horizontal Scaling** — добавление нод и балансировка между ними.
- **Scalability Factor** — отношение прироста нагрузки к приросту ресурсов:
  - **Linear** — удвоили ресурсы → удвоили нагрузку.
  - **Sub-linear** — удвоили ресурсы → нагрузка выросла в 1.5× (реалистичный сценарий; коэффициент < 1).
  - **Supra-linear** — удвоили ресурсы → нагрузка выросла в 3× (коэффициент > 1, редкий оптимум).
  - **Negative** — удвоили ресурсы → система стала медленнее (коэффициент < 0).

*Маппинг: vertical/horizontal — в KB §11; taxonomy scalability factor — **уникально**, см. §6.*

### 2.7 Reliability Engineering

- **RAS**:
  - **Reliability** — вероятность корректной работы системы до момента t.
  - **Availability** — доля времени, когда система доступна.
  - **Serviceability** — простота и скорость ремонта/обслуживания (влияет на availability).
- **Failover**:
  - **Cold standby** — резерв включается только после отказа основного. Дешёво, но downtime; трафик за время простоя теряется. Подходит для некритичных сервисов.
  - **Warm standby** — резерв непрерывно синхронизируется с основным. Проще, но всё ещё возможен downtime и потеря данных.
  - **Hot standby** — одновременная работа с несколькими инстансами; при отказе одного пользователь не замечает переключения. Дорого; по сути — horizontal scaling.

*Маппинг: RTO/RPO и стратегии DR уже размечены karan (TASK-45.13) для KB §9; cold/warm/hot — уточняющая формулировка, см. §6.*

### 2.8 API Gateway

- Появился при переходе от монолита к микросервисам: клиентам приходилось ходить во множество сервисов, каждый дублировал monitoring/logging/security.
- Преимущества:
  1. **Меньше round trips** для клиента (gateway агрегирует вызовы).
  2. **Protocol switching** (например, клиент → HTTPS, gateway → HTTP к сервисам).
  3. **Offload функций** — rate limiting, logging, auth переносятся в одно место.
  4. **Consolidated security** — сервисы открыты только для gateway, единая точка применения политик безопасности.

*Маппинг: функции шлюза уже в KB §13.8; origin-story + 4 преимущества — удачная интервью-формулировка, см. §6.*

### 2.9 Databases

- **NoSQL** иногда называют «sharded databases»; вызовы — resharding и hotspots.
- **Cassandra**: каждая нода может быть primary interface → высокая availability, но постоянная синхронизация снижает consistency.
- **Redis**: in-memory KV, single-threaded, использует **I/O multiplexing**, чтобы один поток обслуживал множество соединений; RAM ~100 нс vs SSD ~100 мкс.
- **Data Lake**: неструктурированные файлы (JSON/CSV) в object storage; схема накладывается при чтении (schema-on-read).
- **Partitioning**: horizontal = одинаковые колонки, разные строки (shard); vertical = разные колонки.
- **ACID**: atomicity, consistency, isolation, durability — базовые определения.
- **Normalized vs denormalized**: normalized — обновления в одном месте, но joins; denormalized — один lookup, но обновление может требовать скана.
- **CAP на примерах**: Cassandra = AP (нет единого мастера, постоянная синхронизация); MongoDB = CP (single master, консистентность, но SPOF).
- Выбор БД: тип данных, приоритеты по CAP, access patterns.

*Маппинг: классы хранилищ — KB §3; CAP/PACELC — §7/§11; Redis single-threaded+I/O multiplexing — **уникальный микрофакт**, см. §6.*

### 2.10 Distributed Systems

- Распределённая система — группа компьютеров, работающих совместно и скрывающих сложность от пользователя.
- **Заблуждения/вызовы** (список автора): надёжность сети, нулевая latency, бесконечная bandwidth, меняющаяся топология, безопасность, размер команды.
- **Clock drift**: у каждой машины свои часы; рассинхронизация может приводить к непредсказуемому поведению.
- **CDN**: географически распределённые edge-серверы для быстрой доставки контента.

*Маппинг: partial failure, часы, сеть — KB §9; классические fallacies — **уникально**, см. §6.*

---

## 3. Упражнения и разборы систем

### 3.1 General / Misc — базовая эволюция

- Сервер + БД на одной машине → проблемы: SPOF, конкуренция за ресурсы.
- Без новых компонентов: vertical scaling (временное решение).
- С новыми компонентами: разделить web и DB; добавить LB (но LB — новый SPOF); DNS load balancing как дешёвая альтернатива; round-robin drawbacks; public/private IP; cache; локальная реплика удалённой БД; sticky sessions; health checks; read replica под аналитику.

*Маппинг: покрыто KB §4–§6, §9, §13.2; полезно как drill.*

### 3.2 AWS Cloud: «What time is it?» (stateless)

Цепочка улучшений:
1. EC2 + Elastic IP — базовая схема.
2. Vertical scaling — при росте пользователей; не масштабируется вечно и даёт простой.
3. Horizontal scaling — добавляем инстансы.
4. Route53 A-record вместо Elastic IP — пользователи ходят по hostname.
5. Проблема DNS: TTL кэширует IP упавшей ноды.
6. ELB + Auto Scaling Group — решает проблему DNS-TTL.
7. Multi-AZ для LB и инстансов; Reserved Instances для предсказуемой базовой нагрузки.

*Маппинг: DNS-TTL pitfall — уникальная формулировка для §13.1; остальное стандартно.*

### 3.3 AWS Cloud: «Video Games Shop» (stateful)

Проблема: корзина теряется, потому что каждый запрос попадает на разный инстанс.
Три решения:
1. **LB sticky sessions** — пользователь прилипает к инстансу. Минус: если инстанс упал, данные потеряны; нагрузка может быть неравномерной.
2. **Client cookies** — клиент носит данные с собой. Минусы: запросы тяжелее; риск подделки cookie.
3. **Server-side session** — session ID в cookie, а данные хранятся в ElastiCache/DynamoDB. Лучший вариант; можно комбинировать с write-through cache+DB.

*Маппинг: триада sticky/cookies/server session — **уникально** для KB, см. §6.*

### 3.4 Big-Scale Monorepo (development system design)

Задача: `git status` на миллионе файлов занимает секунды/минуты из-за `lstat()` на каждый файл.
Решения:
- `git fsmonitor` + Watchman — демон кэширует состояние рабочей директории.
- `feature.manyFiles=true` — index v4 (path-prefix compression) + `core.untrackedCache`.
- `git maintenance` — периодическая оптимизация репо.
- Sparse checkout — в рабочей директории только нужные файлы.
- Build-system-aware sparse checkout — ещё более узкий набор.

*Маппинг: узкая dev-infra тема; не переносим в KB, но оставляем в конспекте как пример «системный дизайн внутри разработки».*

### 3.5 Parking & Reservation System

- Уточнения: пользователи, входы/выходы, масштаб.
- FR: бронирование места, получение тикета, исключение двойного бронирования, типы ТС, тариф по типу/времени.
- Public API: `/reserve`, `/cancel`, `/payment` (внешний процессор).
- Internal API: `/calculate_payment`, `/free_spots`, `/allocate_spot`, `/create_account`, `/login`.
- Scale предсказуем: ограничен числом парковочных мест.
- SQL-схема: Reservations, Garages, Spots, Users, Vehicles.

*Маппинг: простейший шаблон разборов (FR/NFR/API/схема/масштаб); повторяет methodology.md §1–§4. Может служить drill-задачей, но не добавляет в KB.*

### 3.6 WhatsApp / Amazon Prime Video

- В репо только требования/NFR/API-заготовки; detailed design помечен TODO. Для подготовки лучше использовать `classic-designs.md` §3 (мессенджер) и §4 (видео-хостинг).

---

## 4. Советы по интервью

- Выбирай **простейшую архитектуру**, удовлетворяющую требованиям (functional + traffic).
- Задавай уточняющие вопросы: требования, как используется, сколько пользователей, как часто, откуда, constraints.
- В начале: перечисли фичи, озвучь ожидаемые проблемы и трафик.
- На каждом решении называй **pros/cons**.
- Проверяй себя: масштабируется ли? есть ли SPOF?

*Маппинг: полностью перекрыто methodology.md §1, §5, §7.*

---

## 5. Вердикт: стоит ли тратить время перед слотами 18/21/22.09

- **P3** (фоновое чтение после более плотных источников: KB, DDIA, classic-designs, karan, Polomodov).
- **Самое полезное**: две AWS-цепочки (stateless и stateful) как drill на эволюцию архитектуры; формулировка failover cold/warm/hot; scalability factor.
- **Самое бесполезное**: пустые TODO-разделы и разборы WhatsApp/Prime Video без деталей.
- **Рекомендуемый формат**: пролистать §2–§3 этого конспекта (30 мин) и проработать вопросы из упражнений вслух.

---

## 6. Уникальное относительно существующих материалов — что взять в KB 45.1

Ниже — темы, которых нет (или нет в такой форме) в `knowledge-base.md`, `methodology.md`, `classic-designs.md` и соседних конспектах (TASK-45.5–45.13). Для каждой указан целевой раздел KB.

| Тема | Где в этом источнике | Целевой раздел KB | Что в KB сейчас | Решение |
|---|---|---|---|---|
| **Scalability factor** (linear / sub-linear / supra-linear / negative) | §2.6 | §11 «Мини-шпаргалка», блок «Масштаб» | Нет | **Добавить** строку: «realistic scaling is sub-linear; supra-linear — редкий выигрыш; negative scaling — оверхед > прироста» |
| **Fallacies of distributed computing** (network reliability, zero latency, bandwidth, topology change, security, team size) | §2.10 | §9 «Слабые места распределённой среды» | Partial failure, часы, сеть есть, но не в форме «заблуждений» | **Добавить** классические fallacies рядом с partial-failure как интервью-маркер |
| **Stateful session triad** (LB sticky sessions / client cookies / server-side session store) | §3.3 | §9 «Отказоустойчивость» или §13.7 | Не разобрана как триада | **Добавить** сравнение: sticky — теряем при падении ноды; cookies — тяжелее и небезопасно; server session — выносим состояние в Redis/DynamoDB |
| **DNS round-robin + TTL dead-node pitfall** | §2.4, §3.2 | §13.1 DNS | TTL упомянут, питфолл round-robin-as-LB — нет | **Добавить** фразу: round-robin DNS дешёвый LB, но TTL приводит к запросам в мёртвый IP; ELB решает |
| **API Gateway origin + 4 advantages** | §2.8 | §13.8 API-шлюз | Функции шлюза перечислены | **Дополнить** интервью-формулировку: «почему появился» (монолит→микросервисы) + 4 преимущества |
| **Redis single-threaded + I/O multiplexing** | §2.9 | §4 «Кэш» | Redis как класс KV есть; устройства нет | **Добавить** микрофакт: Redis single-threaded, множество соединений — через I/O multiplexing |
| **9 LB techniques** (+ Resource Based, Fixed Weighting, Weighted Response Time, URL Hash) | §2.5 | §13.2 «Алгоритмы балансировщика» | RR/WRR/Least Connections/Hash/Random | **Дополнить** URL Hash (кэш-локальность по URL) и Weighted Response Time |
| **Cold / Warm / Hot standby** с pros/cons и use cases | §2.7 | §9 «Резервирование» | active-active/passive есть; RTO/RPO размечены karan | **Дополнить** cold/warm/hot как шкалу RTO/RPO; hot standby ≈ horizontal scaling |
| **RAS: Reliability / Availability / Serviceability** | §2.7 | §9 | Serviceability не определена | **Добавить** определение serviceability как «простота и скорость ремонта» |

*Примечание:* перенос самих фактов в `knowledge-base.md` — отдельная работа вне скоупа TASK-45.14; конспект размечает кандидатов и целевые § для TASK-45.1 или поддержки KB.
