---
title: Конспект источника 6 — М. Клеппман, «Designing Data-Intensive Applications» (рус. изд. «Высоконагруженные приложения») — карта глав и порядок чтения
source: https://dataintensive.net/
author: Мартин Клеппман
конспект: подготовлено 2026-09-17, TASK-45.10; сжатая карта — knowledge-base.md §12 (TASK-45.1); здесь — детальная: все главы с приоритетами, порядок чтения под слоты 18/21/22.09, план конспектирования «5 минут у доски». 2026-09-17 (TASK-45.39) — дополнено под 2-е издание (§0): соответствие глав, полный текст 2-го изд. — `materials/ddia-2ed/ch-*.md`
статус: книга — источник глубины для раундов 2–3 тренировок и следующих секций; перед первой секцией не читать подряд, только по карте ниже
---

# Источник 6: DDIA (Клеппман) — карта глав и порядок чтения

Единственный «книжный» источник в наборе: не статья на 20 минут, а ~600 страниц. Поэтому правило одно: **DDIA читается только по карте, главы под задачи секции, по 1–2 главы в день, каждая глава закрывается пересказом у доски**. Сжатая версия карты — `knowledge-base.md` §12; этот файл — рабочий инструмент: что брать из каждой главы на секцию, в каком порядке читать под слоты и как конспектировать.

Почему книга вообще в списке: секция проверяет «достаточность» (статья Яндекса), а вопросы этапов 4–6 — «почему это хранилище», «что случится при падении мастера», «какая консистентность и чем платим» — это дословно часть II книги. Кандидат, который отвечает на такие вопросы языком trade-off'ов Клеппмана, звучит на уровень выше.

---

## 0. Два издания: соответствие глав (TASK-45.39)

У книги два издания, и нумерация глав у них **разная**:

- **1-е издание** (Kleppmann, 2017) = русский перевод «Высоконагруженные приложения» (Питер). 12 глав. Карта §2 ниже и порядок чтения §3 записаны по нему.
- **2-е издание** (Kleppmann & Riccomini, 2025, 673 стр.; PDF — `materials/DDIA-2nd-edition.pdf`, полный текст глав — `materials/ddia-2ed/ch-*.md`). 14 глав: гл. 1 переписана, гл. 2 новая (НФТ + кейс домашних лент), старые гл. 5–9 сдвинулись в 6–10 (в гл. 8 «Транзакции» вошли распределённые транзакции, в гл. 10 добавлены «ID Generators and Logical Clocks»), пакетная обработка → гл. 11, потоки → 12, гл. 13 «Философия стриминга», гл. 14 — этика; в гл. 5 появилось durable execution / workflow engines (Temporal, Restate).

| 1-е изд. (рус. перевод) | 2-е изд. | Что изменилось |
|---|---|---|
| 1. Надёжность, масштабируемость, поддерживаемость | 1. Trade-Offs in Data Systems Architecture | переписана: OLTP/OLAP вынесен сюда, cloud vs self-hosted |
| — | **2. Defining Nonfunctional Requirements** | новая: кейс лент (polling vs материализация, 1M записей/с), перцентили, metastable failure |
| 2. Модели данных | 3. Data Models and Query Languages | + Event Sourcing/CQRS, DataFrames |
| 3. Хранение и извлечение | 4. Storage and Retrieval | примерно то же (LSM vs B-tree) |
| 4. Кодирование и эволюция | 5. Encoding and Evolution | + durable execution / workflow engines |
| 5. Репликация | 6. Replication | без сдвига смысла |
| 6. Партиционирование | 7. Partitioning / Sharding | + мультиарендность |
| 7. Транзакции | 8. Transactions | + распределённые транзакции из старой гл. 9 |
| 8. Проблемы распределённых систем | 9. The Trouble with Distributed Systems | без сдвига смысла |
| 9. Консистентность и консенсус | 10. Consistency and Consensus | + ID Generators and Logical Clocks (Lamport/HLC/vector) |
| 10. Пакетная обработка | 11. Batch Processing | — |
| 11. Потоковая обработка | 12. Stream Processing | — |
| 12. Будущее | 13. A Philosophy of Streaming Systems | переработана |
| — | 14. Doing the Right Thing | новая: этика данных |

Приоритеты по структуре 2-го издания: **главы 6–10 — ядро** (репликация → шардирование → транзакции → отказы → консистентность/консенсус), **1–5 — вторично** (фундамент), **11–13 — опционально** (гл. 12 полезна перед секцией — вопросы про Kafka), **14 — этика** (после секций). При чтении русского перевода ориентируемся на колонку слева; по 2-му изданию — справа. Карта переноса выжимок 2-го издания в KB — `materials/ddia-2ed/_map.md`.

---

## 1. Как читать под секцию: 6 принципов

1. **Не подряд.** Скелет — гл. 1 и 3 (словарь + хранение), сердце — вся часть II (гл. 5–9). Часть III — только гл. 11 до секций, остальное после.
2. **Темп: 1–2 главы в день, по 45–75 минут.** Глава «закрыта» не когда прочитана, а когда пересказана у доски за 5 минут без книги (§4).
3. **Каждая глава — конспект в один экран:** схема + 3 термина + 1 trade-off + 1 вопрос с секции, который она закрывает (§4).
4. **Каждая глава привязывается к базе знаний:** после пересказа отметить, в какой раздел `knowledge-base.md` (§3–11) ложится материал — так книга постепенно «перетекает» в шпаргалки, а не остаётся отдельной горой.
5. **В день секции книгу не открывать** (методичка §5: после 12:00 только шпаргалки). DDIA — питание тренировок, а не шпаргалка перед боем.
6. **Русское издание** («Высоконагруженные приложения», Питер) — это **1-е издание**: нумерация глав совпадает с английским 1-м изд., но НЕ со 2-м (соответствие — §0). Названия глав здесь даны по смыслу, ориентируемся на номера.

## 2. Карта 12 глав: приоритет, время, что брать на секцию

Приоритеты: **ЯДРО** — обязательно, вопросы отсюда почти гарантированы; **вторично** — после ядра, добавляют глубины на этапах 3–4; **опционально** — после секций / к уровню staff.

### Часть I. Основы данных (главы 1–4) — фундамент словаря, читать быстро

| Гл. | Тема | Приоритет | Время | Что брать на секцию | Куда ложится |
|-----|------|-----------|-------|----------------------|--------------|
| 1 | Надёжность, масштабируемость, поддерживаемость | ЯДРО (быстро) | 45 мин | Словарь всей секции: как описать нагрузку (RPS, доля чтения/записи, объём данных); латентность **p50/p99** и почему среднее врёт; вертикальное vs горизонтальное масштабирование; эластичность; «сначала опиши нагрузку — потом проектируй» | KB §1–2; этапы 1 и 5 методички |
| 2 | Модели данных и языки запросов | Вторично | 45 мин | Реляционная vs документная: **локальность данных** vs связи many-to-many; когда NoSQL оправдан (доступ по ключу, локальность документа), а когда грабли (связи, транзакции); графовые модели — обзорно | KB §3; лента (профиль/посты), мессенджер в `classic-designs.md` |
| 3 | Хранение и извлечение | ЯДРО | 60 мин | **LSM-tree vs B-tree** — любимый вопрос этапа 4: LSM — быстрый write (memtable → SSTable → компактация) ценой read amplification; B-tree — быстрый и предсказуемый read ценой write amplification; хеш-индексы; вторичные индексы; OLTP vs OLAP (колоночные хранилища) — обзорно | KB §3; выбор KVS в URL shortener |
| 4 | Кодирование и эволюция схем | Вторично | 45 мин | Обратно-совместимость: JSON/protobuf/Avro; эволюция схем (старый читатель ↔ новый писатель); зачем schema registry в событийных системах; миграции без даунтайма | KB §8, §10 (эксплуатация: смены схемы данных — прямой вопрос этапа 6) |

### Часть II. Распределённые данные (главы 5–9) — сердце книги и секции, читать всё

| Гл. | Тема | Приоритет | Время | Что брать на секцию | Куда ложится |
|-----|------|-----------|-------|----------------------|--------------|
| 5 | Репликация | ЯДРО | 60 мин | Single-leader / multi-leader / leaderless; **sync vs async** (чем платим при отказе); replication lag и сессионные гарантии (**read-your-writes**); failover: detect → elect → promote и чем опасен **split brain**; конфликты multi-leader | KB §5, §9; этап 6 («что при падении мастера БД») |
| 6 | Партиционирование | ЯДРО | 60 мин | Range vs hash партиционирование; **skew и hot keys** (celebrity problem); ребалансировка (mod N — плохо; consistent hashing / фиксированные партиции); запросы по нескольким шардам (scatter/gather); вторичные индексы поверх шардов | KB §6; лента (шардирование по user_id), URL shortener |
| 7 | Транзакции | ЯДРО | 75 мин | Уровни изоляции: read committed → snapshot isolation → serializable; гонки: dirty read, **lost update**, **write skew**, phantom; serializable snapshot isolation (SSI) на уровне идеи; слабая изоляция = источник race conditions в нашей схеме | KB §7; лента (счётчики, дедупликация), мессенджер |
| 8 | Проблемы распределённых систем | ЯДРО | 60 мин | **Partial failure — норма, а не авария**; timeout = «не знаю, выполнилось или нет»; нереалистичные модели отказов; часы: monotonic vs wall clock, почему распределённые алгоритмы не доверяют времени; GC-паузы и «зомби»-лидеры, **fencing** | KB §9; этап 6 (отказоустойчивость, экстремальные условия) |
| 9 | Консистентность и консенсус | ЯДРО (самая плотная) | 120 мин (2 сессии) | **Linearizability и чем она отличается от serializability** (классический вопрос-ловушка); CAP/PACELC своими словами; кворумы R+W>N и их ловушки (stale read при лаге); eventual consistency; консенсус **Raft/Paxos на уровне идей** (лидер, термы, голосование); зачем ZooKeeper/etcd; fencing tokens | KB §7, §9; этап 6; вопросы «сильная консистентность vs доступность при партиции» |

### Часть III. Производные данные (главы 10–12) — опционально до секций

| Гл. | Тема | Приоритет | Время | Что брать на секцию | Куда ложится |
|-----|------|-----------|-------|----------------------|--------------|
| 10 | Пакетная обработка | Опционально | 45 мин | Идея MapReduce: partition-parallel batch-джобы; когда batch вместо stream (переработка всей истории); join в batch — обзорно | KB §8; медиа-хостинг (транскодинг как batch-очередь) |
| 11 | Потоковая обработка | Вторично | 60 мин | **Delivery semantics**: at-least/at-most/exactly-once и почему exactly-once — иллюзия без идемпотентного консьюмера; event time vs processing time; окна; replay; CDC | KB §8; вопросы про Kafka в ленте и мессенджере — прямое попадание |
| 12 | Будущее | Опционально | 30 мин | Общая картина: deriving state from event log, сближение batch и stream. На секцию почти не идёт | — (общее развитие, уровень staff) |

### Чего из книги на секцию НЕ надо

- Детали алгоритмов Raft/Paxos (выборы, журналы по шагам) — на уровне идей: «лидер + кворум + термин», схему выборов не рисуем.
- Формальные модели консистентности и доказательства (гл. 9, конец) — называем гарантию и trade-off, а не теорему.
- Внутренности компактации LSM (leveled/tiered, размеры буферов) — достаточно «write идёт в memtable, флаш в SSTable, компактация в фоне, read может пройтись по нескольким таблицам».
- CRDT и продвинутые разрешения конфликтов — упомянуть словом при multi-leader, не глубже.

## 3. Порядок чтения под слоты (18.09 / 21.09 / 22.09)

Универсальный порядок ядра (если бы слотов не было): **гл. 1 → 3 → 5 → 6 → 7 → 8 → 9 → 11** (по 1-му изд.; для 2-го — 1 → 4 → 6 → 7 → 8 → 9 → 10 → 12, см. §0), затем вторичное (2, 4) и опциональное (10, 12). Порядок внутри части II — книжный: репликация → партиции → транзакции → отказы → консенсус, каждая глава опирается на предыдущую.

Привязка к слотам — по вариантам методички §5 (какой слот возьмём — решает пользователь):

| Сценарий | До секции | Между секциями / после | Норма |
|----------|-----------|------------------------|-------|
| **А — слот 18.09** (интенсив ~4 ч) | **DDIA не трогать вовсе**: все 4 часа — статья, методичка, KB, тренировка URL shortener | После секции: гл. 1, 3 (скелет) → гл. 5, 6 → гл. 7–9 (по 1 гл/день) → гл. 11; гл. 2, 4 — по остатку | 0 глав до, ~8 глав после |
| **Б — слот 21.09** (~8 ч на 4 дня) | Чт вечер: —; **Пт–сб: гл. 1, 3**; **Вс: гл. 5, 6**; пн до 12:00 — повтор конспектов, не новая глава | После секции: гл. 7, 8, 9 (плотное ядро, гл. 9 на 2 сессии) → гл. 11 → гл. 2, 4 | 4 главы до, остальное после |
| **В — слот 22.09** (полный курс ~12 ч) | Чт–пт: гл. 1, 3 (плюс базовые материалы); **Сб–вс: гл. 5, 6, 7**; **пн: гл. 8, 9** (гл. 9 — 2 сессии); вт до 12:00: **гл. 11** + повтор конспектов ч. II | После секций: гл. 2, 4 → гл. 10, 12 | 8 глав до, 4 после |

Стоп-правила (жёстко):

- **В день секции новых глав не открывать** — только повтор своих конспектов-«одноэкранок» (§4) и шпаргалки KB §11.
- **Не успеваем план — режем с хвоста, а не по времени:** очередность жертв — сначала гл. 6 (карта в KB §12 заменяет), потом гл. 7 (достаточно KB §7), потом гл. 11. Гл. 9 не резать никогда: консенсус/консистентность — самый дорогой вопрос секции.
- **Главу не начали — не бросать на середине**: лучше пересказать меньший кусок (§4), чем тащить полкниги без конспекта.

## 4. План конспектирования: «5 минут у доски» после каждой главы

Ритуал закрытия главы — по образцу протокола само-тренировки (методичка §6.1): доска/большой лист, телефон на запись, проговор вслух.

### 4.1 Процедура (10 минут на главу)

1. Закрыл книгу. Таймер на **5 минут**.
2. У доски рисуешь центральную схему главы по памяти и проговариваешь вслух, как будто объясняешь интервьюеру.
3. Ещё **5 минут** — самопроверка по чек-листу ниже; чего не хватило — отметить в книге на завтра (перечитать только проблемный раздел).
4. Сфотографировать доску, сохранить 5–7 строк текстом.

### 4.2 Чек-лист пересказа (5 пунктов — всё должно прозвучать)

1. **Схема механизма** — центральная картинка главы (leader-follower с лагом; memtable → SSTable → компактация; кворумное чтение/запись; таймлайн гонки lost update).
2. **3 термина главы** — определения своими словами, не цитатой (например: replication lag, write skew, linearizability).
3. **1 главный trade-off** — «что получаем / чем платим» (LSM: быстрый write ↔ дорогой read; async-репликация: скорость ↔ риск потери данных при failover).
4. **1 вопрос с секции**, который закрывает глава — сформулировать и тут же ответить (например: «что произойдёт при падении мастера?»).
5. **Привязка** — назвать раздел KB (§3–11) и эталон из `classic-designs.md`, куда это ложится.

### 4.3 Фиксация и критерий «глава закрыта»

- Схемы и заметки: `training/ddia/` — `ch-NN-<дата>.jpg` + накопительный `notes.md` (5–7 строк на главу по пунктам чек-листа). Структура папки — по образцу `../algo-exam/`.
- **Критерий:** пересказ уложился в 5 минут без заглядывания в книгу. Не уложился — глава не закрыта: перечитать проблемный раздел, повторить пересказ завтра перед следующей главой.
- Ритм: **не больше 2 глав в день**; глава → пересказ → перерыв. Два пересказа подряд без записи в `notes.md` — нарушение протокола.
- Термины из закрытых глав, которые звучат на тренировках, — переносить в шпаргалку KB §11 («что назвать на секции»), чтобы книга работала на секцию, а не лежала отдельным архивом.

---

## Связанные документы

- `../knowledge-base.md` §12 — сжатая карта DDIA (зеркало этого файла для быстрого доступа)
- `../knowledge-base.md` §1–11 — разделы, к которым привязываются главы
- `materials/ddia-2ed/` — полный текст 2-го издания (TASK-45.39): 14 глав с выжимками, `_map.md` — карта переноса в KB
- `../methodology.md` §5–6 — варианты подготовки под слоты и протокол тренировок (на нём построен §4 этого файла)
- `../classic-designs.md` — эталонные разборы, на которые ссылаются привязки глав
