Перейти к содержимому
TelegramGitHub

Designing Data-Intensive Applications — конспект книги

Designing Data-Intensive Applications — книга Martin Kleppmann (O’Reilly, 2017). Она объясняет, как устроены базы данных, брокеры сообщений и системы обработки данных внутри, и какие компромиссы за этим стоят. Наш конспект сделан по версии Early Release: в ней 11 глав в трёх частях. В финальном издании есть ещё глава 12, The Future of Data Systems. В конспекте её нет.

Это собственный пересказ, а не перевод. За полным текстом, примерами и ссылками на исследования идите в оригинал. Схемы нарисованы заново по содержанию глав.

Карта книги: три части и 11 глав

Автор называет приложение data-intensive, если главная проблема в данных: их объём, сложность или скорость изменения. Не в мощности процессора.

Книга не учит одному продукту. Она разбирает идеи, которые лежат под многими системами: PostgreSQL, MySQL, Cassandra, Kafka, Hadoop, Spark. Продукты меняются, идеи остаются.

ЧастьО чёмГлавы
I. Foundations of Data SystemsОсновы одной системы: надёжность, модели данных, хранение, кодирование1–4
II. Distributed DataЧто происходит, когда данные на многих машинах5–9
III. Derived DataКак из систем собирать конвейеры: пакеты и потоки10–11

Дата-инженер каждый день выбирает хранилище, способ загрузки и способ обработки. У каждого выбора есть цена. Книга учит видеть её.

  • Компромиссы систем. Нет идеальной базы данных. Для каждой системы видно, что она выигрывает и что теряет.
  • Реплики и партиции. Репликация даёт отказоустойчивость и задержку чтения. Партиционирование даёт масштаб и новые сложности.
  • Транзакции и согласованность. Что гарантируют ACID, уровни изоляции и consistency на практике. Почему данные иногда расходятся.
  • Сбои в распределённых системах. Сеть, часы и узлы ненадёжны. Книга показывает, как это влияет на дизайн.
  • Пакеты и потоки. Как устроены MapReduce, dataflow-движки, брокеры и CDC.
  • Основа для выбора. После книги проще оценить БД, брокер или схему пайплайна и задать правильные вопросы поставщику.
РольЧто получит
Начинающий data engineer или backend-разработчикПонимание, что скрыто под SQL, индексами и очередями
Опытный data engineerТочные термины и модели для решений о репликации, партициях, потоках
Архитектор, тимлидЯзык для обсуждения компромиссов и рисков систем

Книга плотная и теоретическая. Нужны базовые знания SQL и общее представление о базах данных.

  • Новичок. Читайте по порядку, но не застревайте. На первом проходе берите «Главную мысль» и таблицы терминов. Сложные места (главы 8 и 9) оставьте на второй проход.
  • Опытный инженер. Идите по задаче. Нужны потоки: главы 10 и 11. Нужна БД: главы 3, 5, 6, 7. Нужно понять расхождение данных: главы 5, 8, 9.
  • Готовите архитектуру пайплайна. Главы 4, 10, 11, затем 5–7.

Предлагаемый порядок:

  1. Главы 1–3: базовые понятия и как хранятся данные.
  2. Глава 4: форматы и совместимость схем.
  3. Главы 5–7: репликация, партиции, транзакции.
  4. Главы 8–9: сбои и согласованность.
  5. Главы 10–11: пакеты и потоки.

Эти две книги дополняют друг друга.

Fundamentals of Data EngineeringDesigning Data-Intensive Applications
ФокусЖизненный цикл данных и архитектураВнутреннее устройство систем
ВопросЧто строить и как выбирать технологииКак это работает и какие есть компромиссы
УровеньШирокий обзор профессииГлубокий разбор механизмов

Сначала можно прочитать конспект Fundamentals of Data Engineering: он даёт карту. Потом эта книга объяснит, что происходит внутри блоков на карте.

ГлаваТема
1. Надёжность, масштабируемость, сопровождаемостьТри цели дизайна, нагрузка, перцентили
2. Модели данных и языки запросовРеляционная, документная и графовая модели
3. Хранение и извлечениеLSM-tree, B-tree, OLTP и OLAP
4. Кодирование и эволюция схемФорматы данных, совместимость версий
5. РепликацияLeader и followers, задержка, конфликты
6. ПартиционированиеРазбиение данных, индексы, перебалансировка
7. ТранзакцииACID, уровни изоляции, аномалии
8. Проблемы распределённых системСбои сети, часы, частичные отказы
9. Согласованность и консенсусLinearizability, порядок, консенсус
10. Пакетная обработкаMapReduce, joins, dataflow-движки
11. Потоковая обработкаБрокеры, CDC, окна, exactly-once

Каждая страница содержит главную мысль, схемы, ключевые термины, выводы для практики и вопросы для самопроверки.