Что такое лямбда-архитектура: основы Big Data для начинающих

Big Data, Большие данные, архитектура, Spark, Hadoop, машинное обучение, интернет вещей, Internet of Things, IoT, IIoT, Machine Learning, лямбда-архитектура

Рассматривая основы больших данных, сегодня мы расскажем лямбда-архитектуру, одну из двух главных подходов к построению Big Data систем. Читайте в нашей статье, зачем нужна эта концепция и как она работает, а также при чем тут машинное обучение, интернет вещей, Apache Spark и Hadoop.

Что такое Лямбда-архитектура и зачем она нужна

Рассмотрим типичный кейс по рассылке контекстной рекламы о скидках в ближайшем офлайн-магазине. Для повышения конверсии необходимо персонализировать маркетинговое предложение. Для этого следует быстро и точно сегментировать каталог клиентов с учетом анализа исторических данных по каждому из них, одновременно определив местоположение конкретного абонента в режиме реального времени. За сегментирование и предиктивную аналитику клиентских потребностей отвечают алгоритмы машинного обучения (Machine Learning). При этом реклама становится нерелевантной при физическом перемещении потребителя, поэтому нужно успеть сообщить потенциальному покупателю маркетинговое предложение, пока он находится в зоне пешей досягаемости торгового объекта. Таким образом, требуется выполнить онлайн-анализ непрерывного потока геоданных.

Этот пример отлично иллюстрирует задачи Big Data системы, когда есть потребность в интерактивной предиктивной аналитике на базе исторического бэкграунда. Разумеется, большие данные предполагают высокую скорость их обработки. Однако, на практике, некоторые операции, в частности, классический MapReduce на Hadoop, могут выполняться достаточно долго. В ряде случаев подобная задержка приведет к устареванию информации и потери ее актуальности. Чтобы предупредить эту проблему, необходимо объединить потоковую обработку данных в режиме реального времени с результатами пакетной аналитики. Для этого была предложена лямбда-архитектура, когда обработка данных разделяется на 2 пути [1]:

  • «холодный путь» — пакетный уровень, где все входящие данные хранятся в необработанном виде и обрабатываются в пакетном режиме. Обычно пакетный уровень представлен озерами больших данных (Data Lake) на базе Apache Hadoop, где содержится «сырая» информация, которая не изменяется и не обновляется, а лишь пополняется новыми данными. Именно здесь содержатся так называемые мастер-данные или нормативно-справочная информация (НСИ), важная для бизнеса о клиентах, продуктах, услугах, персонале, технологиях, материалах и прочих доменных знаниях, которые достаточно редко изменяются и не являются транзакционными. В рассмотренном примере алгоритмы Machine Learning используют пакетные данные для сегментирования клиентов и составления прогнозных моделей, анализируя сохраненную историю пользовательского поведения. Также важно, что именно этот уровень используется для обработки данных по расписанию, т.е. формирования пакетных заданий.
  • «горячий путь» — скоростной уровень (или уровень ускорения), где данные анализируются в режиме реального времени. Этот уровень обеспечивает минимальную задержку обработки с некоторой потерей точности. Он представляет собой совокупность складов данных, где в отдельные представления реального времени добавляется информация с коротким жизненным циклом, чтобы исключить дублирование данных. Для реализации скоростного уровня обычно используются Big Data фреймворки потоковой обработки: Apache Spark, Storm или Flink.

В этой архитектуре также выделяют сервисный уровень (или уровень обслуживания), который индексирует пакетное представление – результаты пакетного уровня для эффективного выполнения запросов. За счет индексации и обработки поступающей информации, результаты немного отстают во времени. Уровень ускорения обновляет уровень обслуживания, отправляя ему добавочные обновления с учетом последних данных [1].

архитектура, большие данные, Big Data, обработка данных
Лямбда-архитектура Big Data систем

Таким образом, лямбда – это архитектурный подход, при котором произвольная функция применяется к произвольному набору данных за минимальное время. Универсальность концепции обеспечивает быстроту решения любых задач, в т.ч. сложных [2]. Если формализовать этот подход в виде функционального уравнения, которое определяет любой запрос в большой области данных, оно будет выглядеть так [3]:

Query = λ (Complete data) = λ (live streaming data) * λ (Stored data)

Это уравнение означает, что все связанные с данными запросы могут обрабатываться путем объединения результатов из исторического хранилища в форме пакетов и потоковой передачи в реальном времени с помощью скоростного уровня [3].

Где и как используется λ-подход в Big Data

Итак, лямбда-архитектура позволяет обрабатывать большие данные в режиме, близкому к реальному времени. При этом этот подход является отказоустойчивым и масштабируемым. Благодаря функциям пакетного и скоростного уровней можно добавлять новые данные в основное хранилище, обеспечивая при этом сохранность существующих данных. Поэтому лямбда-архитектура широко используется на практике, во многих Big Data проектах, в частности, Twitter, Netflix и Yahoo [3].

Обобщая кейсы применения λ-архитектуры, можно сказать, что она актуальна для тех корпоративных моделей обработки данных, где [3]:

  • требуется разовая обработка пользовательских запросов с использованием неизменяемого хранилища данных;
  • нужны быстрые ответы и различные обновления в форме новых потоков данных;
  • необходима сохранность исторических данных, когда ни одна из записей не должна быть удалена, с возможностью добавления обновления и новых данных в хранилище.

Таким образом, лямбда-подход актуален не только для бизнес-приложений с пакетной и потоковой обработкой Big Data, но и для систем интернета вещей (Internet of Thing, IoT), в т.ч. промышленного (Industrial IoT, IIoT). Напомним, архитектура таких систем предполагает сбор малых данных со множества различных датчиков, их сохранение, агрегацию и облачную обработку в т.ч. с использованием алгоритмов Machine Learning.

С прикладной точки зрения интересно использование Apache Spark в построении λ-архитектуры, т.к. этот фреймворк позволяет обрабатывать большие данные как в пакетном, так и в потоковом режиме. Справедливости ради здесь стоит отметить, что Spark реализует не строго потоковую обработку данных, а микро-пакетный подход (micro-batch), однако, эти вычисления укладываются в концепцию near real-time. Кроме того, библиотека машинного обучение Spark MLLib включает расширенный набор современных алгоритмов Machine Learning. А средства Spark SQL дает возможность работать с данными с помощью привычных инструментов BI-аналитики: структурированных запросов реляционной логики.

Поэтому Apache Spark используется во множестве Big Data систем на базе лямбда-архитектуры, в частности, в Azure Cosmos DB – распределенной многомодельной базе данных, интегрированной с аналитической платформой HDInsight [4]:

  1. все данные отправляются в Azure Cosmos DB для обработки;
  2. пакетный уровень предполагает неизменяемый набор мастер-данных и предварительно вычисляет пакетные представления;
  3. сервисный уровень предусматривает представления пакетов данных для быстрой отправки запросов;
  4. скоростной уровень компенсирует время обработки данных, используя только последние обновления;
  5. ответ на любой запрос получается за счет объединения результатов пакетного представления и вычислений в режиме реального времени.
Azure Cosmos DB для больших данных, Apache Spark
Архитектура и принцип работы Azure Cosmos DB

Достоинства и недостатки архитектуры

Итак, лямбда-архитектура предоставляет следующие преимущества для Big Data системы [3]:

  • высокая сохранность исторических данных за счет пакетного уровня на базе Hadoop Data Lake или другого отказоустойчивого распределенного хранилища с низкой вероятностью ошибок и сбоев;
  • баланс скорости и надежности;
  • масштабируемость.

Однако, λ-подходу свойственны следующие недостатки [2]:

  • невозможность изменения стратегии анализа данных «на лету» — конечная непротиворечивость данных делает невозможной отправку информации обратно на пакетный уровень. Требуется повторное проведение всех вычислений, из-за привязки к долговременному хранилищу НСИ, данные трудно перенести или реорганизовать. А затраты на повторное вычисление каждого пакетного цикла не всегда оправданы на практике [3].
  • отсутствие BI-средств – большинство инструментов, ориентированных на лямбда-архитектуру, не поддерживает SQL-запросы или другие типичные средства бизнес-аналитики, относясь к стеку Big Data, в частности NoSQL.
  • сложность – множество разнородных компонентов, которые передают данные друг другу, что задерживает вычисления в реальном времени. Логика обработки информации дублируется в холодном и горячем путях с использованием различных структур данных, усложняя общее управление. Также увеличиваются накладные расходы на разработку.

Впрочем, это частично данные недостатки компенсируются с помощью Apache Spark. Однако, для быстрой обработки событий в режиме реального времени без пакетного представления более целесообразен другой подход – Каппа-архитектура, о чем мы поговорим в следующей статье.

Больше практических подробностей про архитектуры больших данных и Apache Spark вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Источники

  1. https://docs.microsoft.com/ru-ru/azure/architecture/data-guide/big-data/
  2. http://datareview.info/article/lyambda-arhitektura-novyiy-podhod-k-analizu-dannyih/
  3. https://www.machinelearningmastery.ru/a-brief-introduction-to-two-data-processing-architectures-lambda-and-kappa-for-big-data-4f35c28005bb/
  4. https://docs.microsoft.com/ru-ru/azure/cosmos-db/lambda-architecture