Обзор книги “Большие данные” (“Big Data”)

Alexander Polomodov
3 min readMar 11, 2022

Книга “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”, а дальше поделиться им с вами.

Рис.1 “Обложка книги”

Если кратко характеризовать книгу, то в ней идет речь про Lambda Architecture (лямбда-архитектуру), которая состоит из трех уровней: batch, serving и speed layer. Эти же уровни разложены по по частям книги, как можно увидеть ниже

Рис.2 “Содержимое книги”

Саму лямбда архитектуру авторы определяют так

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 “Желаемые свойства Big Data System”

Для обеспечения всех этих свойств система делится на 3 уровня

Рис.4 “3 уровня Big Data System”

Каждый из этих уровней отвечает за свою часть работы и каждому уровню авторы посвящают достаточно времени. Если объяснять на пальцах, то, на batch layer у нас хранятся мастер данные в формате иммутабельных событий, которые только прибывают (append only). Эти данные можно держать просто в распределенной файловой системе. На этом же уровне происходит расчет произвольных представлений, которые попадают в serving layer, который должен обеспечивать быстрые запросы по этим произвольным представлениям и который тоже может быть иммутабельным. Правда, его иммутабельность ограничена периодами между перерасчетами batch layer, который просто может целиком перезаписывать каждый раз хранилище serving layer, вместо накатывания апдейтов. Ну а speed layer нужен для того, чтобы иметь актуальные данные по промежутку между перерасчетами batch layer. Это достигается за счет обработки потока данных и расчета (возможно приблизительного) агрегатов, которые нужны потребителям.

Круто, что авторы не ограничиваются теорией, но и разбирают достаточно характерные задачи для big data systems

  1. подсчет просмотров url нашего сайта по времени
  2. расчет количества уникальных пользователей по времени — здесь появляются вероятностные структуры данных, например, HyperLogLog
  3. подсчет отказов нашего веб-приложения по всему домену

А используемый для примеров стек выглядит следующим образом

Рис.5 “3 уровня Big Data System с выбранными технологиями для практических примеров”

Понятно, что в этом кратком обзоре я пробежался только по верхам книги, которая заслуживает полноценного прочтения, чего вам и желаю.

Если вы решите не просто прочитать книгу, но и попрактиковаться, то рекомендую пройти курс со Stepic, который мне в свое время очень понравился “Hadoop. Система для обработки больших объемов данных” — там вы сможете на практике обкатать подходы из этой книги.

--

--

Technical Director @ Tinkoff, Department of client interfaces, marketing and engagement.