Обзор книги “Большие данные” (“Big Data”)
Книга “Big Data: Principles and best practices of scalable realtime data systems” за авторством Nathan Marz и James Warren — это интересной материал, которому уже исполнился 7 лет, но который концептуально все еще актуален. Правда, упоминание инструментов конечно показывают насколько эта книга стара:)
Я перечитывал эту книгу, готовясь к очередной встрече нашего книжного клуба, на которой мы планировали обсуждать главы про batch
и stream processing
из книги “Designing Data Intensive Application” Мартина Клеппмана. В итоге, мне показалось интересным сделать конспект книги “Big Data”, а дальше поделиться им с вами.
Если кратко характеризовать книгу, то в ней идет речь про Lambda Architecture
(лямбда-архитектуру), которая состоит из трех уровней: batch
, serving
и speed layer
. Эти же уровни разложены по по частям книги, как можно увидеть ниже
Саму лямбда архитектуру авторы определяют так
The Lambda Architecture provides a general-purpose approach to implementing an arbitrary function on an arbitrary dataset and having the function return its results with low latency
Хорошо, если эта архитектура обеспечивает
- возможность горизонтально масштабировать систему
- отказоустойчивость в случае аппаратных ошибок
- возможность исправить ошибки, появляющиеся из-за человеческого фактора
Но полный список желаемых свойств Big Data System выглядит так
Для обеспечения всех этих свойств система делится на 3 уровня
Каждый из этих уровней отвечает за свою часть работы и каждому уровню авторы посвящают достаточно времени. Если объяснять на пальцах, то, на batch layer
у нас хранятся мастер данные в формате иммутабельных событий, которые только прибывают (append only
). Эти данные можно держать просто в распределенной файловой системе. На этом же уровне происходит расчет произвольных представлений, которые попадают в serving layer
, который должен обеспечивать быстрые запросы по этим произвольным представлениям и который тоже может быть иммутабельным. Правда, его иммутабельность ограничена периодами между перерасчетами batch layer
, который просто может целиком перезаписывать каждый раз хранилище serving layer
, вместо накатывания апдейтов. Ну а speed layer
нужен для того, чтобы иметь актуальные данные по промежутку между перерасчетами batch layer
. Это достигается за счет обработки потока данных и расчета (возможно приблизительного) агрегатов, которые нужны потребителям.
Круто, что авторы не ограничиваются теорией, но и разбирают достаточно характерные задачи для big data systems
- подсчет просмотров url нашего сайта по времени
- расчет количества уникальных пользователей по времени — здесь появляются вероятностные структуры данных, например, HyperLogLog
- подсчет отказов нашего веб-приложения по всему домену
А используемый для примеров стек выглядит следующим образом
Понятно, что в этом кратком обзоре я пробежался только по верхам книги, которая заслуживает полноценного прочтения, чего вам и желаю.
Если вы решите не просто прочитать книгу, но и попрактиковаться, то рекомендую пройти курс со Stepic, который мне в свое время очень понравился “Hadoop. Система для обработки больших объемов данных” — там вы сможете на практике обкатать подходы из этой книги.