Ревью книги Designing Data-Intensive Applications
Как очевидно из названия, книга посвящена обработке данных в самом широком смысле. Ее автор, Martin Kleppmann, является специалистом в области распределенных систем и имеет непосредственное отношение к разработке проектов Apache Avro и Apache Samza. Книга опубликована совсем недавно - в 2017-м году и имеет высокий рейтинг на amazon.com - 4.8.
Сразу же опишу свое впечатление - это фантастично. Я нашел здесь много новой и интересной информации - книга читалась взахлеб и без остановок. Некоторые главы, правда, получились нудными, а некоторые наоборот запутанными, но это не испортило общее впечатление.
О чем же книга?
Книга имеет обзорный характер. Здесь нет размытости и избыточной теоретичности и обобщенности академических трудов или глубины и деталей сухих white paper’ов. Это не описание баз данных и не их сравнение. Конкретные базы данных и правда рассматриваются, но лишь кратко для иллюстрации общего подхода.
Здесь автор описывает конкретные проблемы, возникающие при обработке данных, - оптимизация операций чтения/записи, быстрых OLTP транзакций и больших выборок в OLAP базах, способов представления данных на диске и в памяти, форматов передачи данных. Он рассматривает атомарность и изоляцию транзакций, способы масштабирования и проблему ненадежности распределенных систем. Также разбираются существующие подходы к решению этих проблем - SSTable и Log Structured Storage, уровни изоляции транзакций и их реализация, виды репликаций и consistency.
Думаю, что материал посвященный конкретным системам, таким как Redis, Riak, Kafka etc, может достаточно быстро устареть из-за непрерывного развития этой области и эволюции самих инструментов.
В чем же исключительность книги?
Она заключается в широком охвате материала и удачном балансе между краткостью и глубиной погружения в детали. Примеры - краткие и поразительно наглядные. Например, когда автор рассматривает форматы передачи данных (типа Thrift), он приводит пример упакованного сообщения и разбирает его бинарную структуру и способы оптимизации размера.
Надо отметить обширные списки литературы - к каждой главе идет огромным список ссылок (> 50) на книги, white paper’ы или просто статьи и публикации по теме.
Прочитать эту книгу - будто высунуть голову из земли, которую ты спрятал туда словно страус. Конечно, многое будет знакомо и так или иначе звучало на конференциях или встречалось в документации. Но нельзя не отметить пользу от систематизации и дополнении этих обрывочных знаний. Книга дает фундамент, опираясь на который уже совсем не сложно ориентироваться в особенностях распределенных баз данных , гарантиях, которые они предоставляют, компромиссах, на которые они идут. И конечно часть материала окажется новой. Например, системы планирования и обработки задач и потоков данных (MapReduce, Hadoop, Spark, Kafka, …)
В заключение
Итак, книга без сомнения must read особенно для тех, кто работает с базами данных или более экзотическими системами обработки данных (брокеры сообщений, key-value системы для, к примеру, кеширования). Она обзорная и с хорошими примерами. Несмотря на значительный для такой книги размер (> 500 страниц) она однозначно стоит потраченного времени и заслуживает прочтения от корки до корки.
Кратко перечислю темы, которые пооказались мне наиболее интересными:
- Графовые и OLAP базы данных
- Протоколы передачи данных (Thrift, Protocol Buffers, Avro)
- SSTable и Log Structured Storage
- Репликация
- Транзакции и уровни изоляции