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 и 3 (словарь + хранение), сердце — вся часть II (гл. 5–9). Часть III — только гл. 11 до секций, остальное после.
- Темп: 1–2 главы в день, по 45–75 минут. Глава «закрыта» не когда прочитана, а когда пересказана у доски за 5 минут без книги (§4).
- Каждая глава — конспект в один экран: схема + 3 термина + 1 trade-off + 1 вопрос с секции, который она закрывает (§4).
- Каждая глава привязывается к базе знаний: после пересказа отметить, в какой раздел
knowledge-base.md(§3–11) ложится материал — так книга постепенно «перетекает» в шпаргалки, а не остаётся отдельной горой. - В день секции книгу не открывать (методичка §5: после 12:00 только шпаргалки). DDIA — питание тренировок, а не шпаргалка перед боем.
- Русское издание («Высоконагруженные приложения», Питер) — это 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 минут на главу)
- Закрыл книгу. Таймер на 5 минут.
- У доски рисуешь центральную схему главы по памяти и проговариваешь вслух, как будто объясняешь интервьюеру.
- Ещё 5 минут — самопроверка по чек-листу ниже; чего не хватило — отметить в книге на завтра (перечитать только проблемный раздел).
- Сфотографировать доску, сохранить 5–7 строк текстом.
4.2 Чек-лист пересказа (5 пунктов — всё должно прозвучать)
- Схема механизма — центральная картинка главы (leader-follower с лагом; memtable → SSTable → компактация; кворумное чтение/запись; таймлайн гонки lost update).
- 3 термина главы — определения своими словами, не цитатой (например: replication lag, write skew, linearizability).
- 1 главный trade-off — «что получаем / чем платим» (LSM: быстрый write ↔ дорогой read; async-репликация: скорость ↔ риск потери данных при failover).
- 1 вопрос с секции, который закрывает глава — сформулировать и тут же ответить (например: «что произойдёт при падении мастера?»).
- Привязка — назвать раздел 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— эталонные разборы, на которые ссылаются привязки глав