Что такое Lambda-архитектура?

Что такое Lambda-архитектура?

Мы сталкиваемся с огромными объемами информации, высокой нагрузкой, и постоянно меняющимися требованиями. Все это требует от нас не только навыков программирования, но и грамотного проектирования архитектуры, которая способна справиться с этими вызовами.

Именно здесь на сцену выходит архитектурный паттерн, о котором мы сегодня поговорим - Lambda-архитектуре. Если вы уже имеете опыт в области обработки больших данных, то, возможно, слышали о ней. Lambda-архитектура - это эффективный способ структурирования и организации процессов сбора, обработки и анализа данных, обеспечивая надежность, масштабируемость и гарантированную консистентность.

Что такое Lambda-архитектура?

Lambda-архитектура - это эффективный способ структурирования и организации процессов сбора, обработки и анализа данных, обеспечивая надежность, масштабируемость и гарантированную консистентность.

Lambda-архитектура - это мощный инструмент для обработки больших данных, который объединяет в себе как пакетную, так и потоковую обработку данных, обеспечивая гибкость и надежность.

Познакомьтесь с основами лямбда-архитектуры в подробном руководстве от специалистов компании DST Global. Изучите его компоненты, рабочий процесс, приложения и лучшие практики.

Объем генерируемых сегодня данных огромен: они поступают из таких источников, как Интернет вещей (IoT), социальные сети, показатели приложений и аналитика устройств. Задача инженерии данных — обработка и анализ этого огромного количества информации в режиме реального времени. Это поднимает важнейший вопрос: способны ли наши нынешние системы данных удовлетворить этот спрос?

Как работает лямбда-архитектура?

Лямбда-архитектура — это парадигма инженерии данных — способ структурирования системы данных для решения проблемы задержки и проблемы точности. Впервые он был представлен Натаном Марцем и Джеймсом Уорреном в 2015 году. Архитектура Lambda разделяет систему на три уровня: пакетный уровень, уровень скорости и уровень обслуживания.

Архитектура Lambda является горизонтально масштабируемой. Это означает, что если ваш набор данных станет слишком большим или необходимых вам представлений данных станет слишком много, все, что вам нужно сделать, это добавить больше компьютеров. Он также ограничивает самую сложную часть системы на уровне скорости, где выходные данные являются временными и могут быть отброшены (каждые несколько часов), если когда-либо возникнет необходимость в уточнении или исправлении.

Преимущества Lambda-подхода

Масштабируемость и производительность

Одним из ключевых преимуществ Lambda-архитектуры является её способность масштабироваться горизонтально для обработки огромных объемов данных. Это особенно важно в современном мире, где данные растут экспоненциально.

Скорость обработки: Путем разделения обработки на пакетную и потоковую, Lambda-архитектура позволяет достичь высокой производительности. Пакетная обработка работает с большими объемами данных в пакетном режиме, что подходит для анализа и агрегации исторических данных. Потоковая обработка, с другой стороны, обрабатывает данные в реальном времени, обеспечивая низкую задержку между поступлением данных и результатами их обработки.

Горизонтальное масштабирование: Для обработки больших данных часто требуется распределенная архитектура. Lambda-архитектура позволяет горизонтально масштабировать как пакетную, так и потоковую обработку. Это означает, что вы можете добавлять вычислительные ресурсы по мере роста данных, обеспечивая высокую производительность.

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

Отказоустойчивость

Системы обработки больших данных должны быть отказоустойчивыми, чтобы обеспечить непрерывную работу даже при сбоях в оборудовании или программных сбоях. Lambda-архитектура придает особое внимание этой характеристике.

Резервирование данных: Один из способов обеспечить отказоустойчивость - это резервирование данных на разных уровнях. Слой сырых данных (Raw Data Layer) сохраняет данные в их исходной форме, что позволяет восстановить утерянные данные в случае сбоя. Слой батч-вью (Batch Layer) и слой сервисных данных (Serving Layer) также могут быть резервированы для предотвращения потери агрегированных данных.

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

Пример преимущества отказоустойчивости: Представьте, что вы строите систему аналитики для биржевой торговли. Даже короткий сбой в данных или аналитике может привести к большим финансовым потерям. Отказоустойчивость Lambda-архитектуры обеспечивает надежность важных бизнес-процессов.

Гарантированная консистентность

Согласованность данных - это ключевой аспект при работе с большими данными, особенно в распределенных системах. Lambda-архитектура предоставляет механизмы обеспечения гарантированной консистентности данных.

Lambda-батч: В пакетной обработке данные обрабатываются с учетом всего объема данных, что обеспечивает высокую консистентность. Пакетные представления данных всегда соответствуют текущим данным.

Lambda-поток: Потоковая обработка обеспечивает низкую задержку, но может сталкиваться с проблемами консистентности. Однако с помощью механизмов обработки выборки и временных окон можно достичь высокой консистентности данных в потоковой обработке.

Пример преимущества гарантированной консистентности: В системе учета транзакций банка, обработка больших данных требует строгой гарантированной консистентности, чтобы избежать ошибок в учете средств клиентов.

Гибкость в выборе инструментов

В мире обработки больших данных, не существует универсального решения. Важно иметь возможность выбирать инструменты и технологии в зависимости от конкретных потребностей и задач. Lambda-архитектура обеспечивает эту гибкость.

Технологический стек: Вы можете выбирать инструменты для пакетной и потоковой обработки в соответствии с вашими потребностями. Например, Apache Hadoop, Apache Spark и Apache Flink - это популярные инструменты для пакетной и потоковой обработки, и вы можете комбинировать их в Lambda-архитектуре.

Базы данных: Вы также свободны в выборе базы данных для слоя сервисных данных (Serving Layer). Это может быть реляционная БД, NoSQL БД или даже распределенная система хранения, такая как Apache HBase.

Пример гибкости выбора инструментов: В зависимости от задачи, вы можете использовать Spark для быстрой обработки данных в реальном времени и Hive для создания слоя батч-вью для анализа и агрегации данных.

Объяснение трех уровней лямбда-архитектуры

Пожилой мужчина, живущий один в большом особняке, решает настроить все свои часы так, чтобы они соответствовали правильному времени на кухонных часах — 9:04 утра. Из-за его медленного темпа к тому времени, когда он достигает последних часов в 9:51, он все равно устанавливает их на 9:04, в результате чего все его часы становятся неправильными. Это проблема, с которой мы столкнулись бы, если бы в системе данных был только пакетный уровень. На следующий день он использует секундомер — свой датчик скорости — чтобы отслеживать свой прогресс. Начиная с 9:04, он отмечает прошедшее время по секундомеру при установке каждых часов, гарантируя, что последние часы точно установлены на 9:51.

В этой аналогии, которая, надо признать, не идеальна, мужчина является обслуживающим слоем. Он просматривает пакетный обзор (бумагу с надписью «9:04 утра») вокруг своего особняка, чтобы ответить: «Который час?» Но он также выполняет дополнительную работу по согласованию пакетного представления со слоем скорости, чтобы получить максимально точный ответ.

Понимание пакетного уровня

Как упоминалось выше, лямбда-архитектура состоит из трех уровней. Первый уровень — пакетный уровень — хранит весь набор данных и вычисляет пакетные представления. Сохраненный набор данных является неизменяемым и доступен только для добавления. Новые данные постоянно передаются и добавляются к набору данных, но старые данные всегда остаются неизменными. Пакетный уровень также вычисляет пакетные представления, которые представляют собой запросы или функции для всего набора данных. Эти представления впоследствии можно запросить для получения ответов с малой задержкой на вопросы по всему набору данных. Однако недостатком является то, что вычисление таких пакетных представлений занимает много времени.

Понимание уровня обслуживания

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

Понимание уровня скорости

Третий уровень — это уровень скорости. Данные, поступающие на пакетный уровень, также передаются на уровень скорости. Разница в том, что, хотя пакетный уровень хранит все данные с начала своего времени, уровень скорости заботится только о тех данных, которые поступили с момента завершения последнего набора пакетных представлений. Уровень скорости компенсирует высокую задержку при вычислении пакетных представлений за счет обработки запросов к самым последним данным, которые пакетные представления еще не учитывают.

Преимущества лямбда-архитектуры

Марца и Уоррена, В основополагающей книге объясняющей лямбда-архитектуру, среди других тем, они перечисляют восемь желательных свойств в системе больших данных, описывая, как лямбда-архитектура удовлетворяет следующим требованиям:

- Надежность и отказоустойчивость. Поскольку пакетный уровень предназначен только для добавления и, таким образом, содержит весь набор данных с начала времен, система устойчива к ошибкам человека. В случае повреждения данных все данные с момента повреждения могут быть удалены и заменены правильными данными. Пакетные представления можно заменить на полностью пересчитанные, а слой скорости можно удалить. За время, необходимое для создания нового набора пакетных представлений, всю систему можно перезагрузить и снова запустить.

- Масштабируемость. Архитектура Lambda спроектирована с использованием уровней, построенных как распределенные системы. Просто добавив больше машин, конечные пользователи смогут легко масштабировать эти системы по горизонтали.

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

- Расширяемость: по мере поступления в систему данных новых типов данных потребуются новые представления. Системы данных не привязаны к определенным видам или определенному количеству пакетных представлений. Новые представления могут быть закодированы и добавлены в систему, единственным ограничением являются ресурсы, которые легко масштабируются.

- Специальные запросы: при необходимости пакетный уровень может поддерживать специальные запросы, которые были недоступны в пакетных представлениях. Если предположить, что высокая задержка для этих специальных запросов допустима, то полезность пакетного слоя не ограничивается только генерируемыми им пакетными представлениями.

- Минимальное обслуживание: архитектура Lambda в своем типичном воплощении использует Apache Hadoop для пакетного уровня и ElephantDB для уровня обслуживания. Оба довольно просты в обслуживании.

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

- Чтение и обновление с низкой задержкой. В лямбда-архитектуре последнее свойство системы больших данных реализуется уровнем скорости, который предлагает запросы в реальном времени к последнему набору данных.

Проблемы лямбда-архитектуры и ключевые соображения

Хотя преимущества лямбда-архитектуры кажутся многочисленными и очевидными, следует иметь в виду некоторые недостатки. Прежде всего, стоимость станет соображением. Хотя масштабирование не очень сложно — просто добавьте больше машин — мы видим, что пакетный уровень обязательно должен будет расширяться и расти с течением времени. Поскольку все данные доступны только для добавления и никакие данные на пакетном уровне не отбрасываются, стоимость масштабирования со временем обязательно будет расти.

Другие отметили проблему поддержки двух отдельных наборов кода для вычисления представлений для пакетного уровня и уровня скорости. Оба уровня работают с одним и тем же набором (или, в случае уровня скорости, подмножеством) данных, и вопросы, задаваемые обоим уровням, аналогичны. Однако поскольку эти два уровня построены на совершенно разных системах (например, Hadoop или Snowflake для пакетного уровня, но Storm или Spark для уровня скорости), обслуживание кода для двух отдельных систем может быть затруднено.

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

Выше мы отметили, что «уровень скорости заботится только о тех данных, которые поступили после завершения последнего набора пакетных представлений». Хотя это и правда, важно пояснить, что небольшая часть данных не сохраняется; он обрабатывается сразу же по мере поступления, а затем отбрасывается. Уровень скорости также называют «уровнем потоковой обработки». Помните, что цель уровня скорости — обеспечить просмотр самых последних данных в режиме реального времени с малой задержкой, данных, которые еще не учитываются пакетными представлениями.

По этому поводу первоначальные авторы лямбда-архитектуры ссылаются на «конечную точность», отмечая, что пакетный уровень стремится к точным вычислениям, а уровень скорости — к приблизительным вычислениям. Приблизительное вычисление слоя скорости в конечном итоге будет заменено следующим набором пакетных представлений, что приведет систему к «конечной точности».

Обработка потока в реальном времени для создания представлений, которые постоянно обновляются по мере поступления новых потоков данных за миллисекунды, — невероятно сложная задача. В таких случаях часто рекомендуется объединить базу данных на основе документов с системой индексирования и запросов.

Различия между лямбда-архитектурой и каппа-архитектурой

Выше мы отмечали, что существенным недостатком лямбда-архитектуры является поддержка двух отдельных кодовых баз для выполнения одинаковой обработки, поскольку пакетный уровень и уровень скорости представляют собой разные распределенные системы. Архитектура Kappa стремится решить эту проблему, полностью удалив пакетный уровень.

Вместо этого как представления в реальном времени, рассчитанные на основе последних данных, так и пакетные представления, рассчитанные на основе всех данных, выполняются в пределах одного уровня обработки потока. Весь набор данных — журнал неизменяемых данных, доступный только для добавления, — быстро проходит через систему, чтобы создать представления с точными вычислениями. Между тем, исходные задачи «уровня скорости» из лямбда-архитектуры сохраняются в архитектуре каппа, по-прежнему обеспечивая представления с малой задержкой и приблизительными вычислениями.

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

Лямбда-архитектура через контейнеры на Heroku

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

Heroku хорошо служит контейнерной облачной платформой как услуга (PaaS), позволяя вам с легкостью развертывать и масштабировать ваши приложения. Для пакетного уровня вы, скорее всего, развернете контейнер Docker для Apache Hadoop. В качестве уровня скорости вы можете рассмотреть возможность развертывания Apache Storm или Apache Spark. Наконец, на уровне обслуживания вы можете развернуть контейнеры Docker для Apache Cassandra или MongoDB в сочетании с индексированием и запросами с помощью Elasticsearch.

Варианты использования и приложения

Лямбда-архитектура приносит пользу широкому кругу областей, управляемых данными. Два примера включают улучшение машинного обучения и управление потоками данных из Интернета вещей.

Лямбда-архитектура в машинном обучении

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

Лямбда-архитектура для Интернета вещей

В то время как машинное обучение может быть на выходной стороне лямбда-архитектуры, Интернет вещей вполне может оказаться на входной стороне системы данных. Представьте себе город с миллионами автомобилей, каждый из которых оснащен датчиками для отправки данных о погоде, качестве воздуха, пробках, информации о местоположении, манере вождения и так далее. Это огромный поток данных, который будет передаваться на пакетный уровень и уровень скорости лямбда-архитектуры. Таким образом, устройства Интернета вещей являются прекрасным примером предоставления данных в рамках лямбда-архитектуры.

Заключение

Масштабирование и надежность системы по мнению специалистов DST Global представляют собой огромные проблемы, поэтому такие парадигмы, как лямбда-архитектура, являются отличным руководством. Поскольку в систему данных поступают огромные объемы данных, пакетный уровень обеспечивает точность с высокой задержкой, а уровень скорости обеспечивает приближение с малой задержкой. Между тем, уровень скорости отвечает на запросы, согласовывая эти два представления, чтобы обеспечить наилучший возможный ответ. Реализация системы данных с лямбда-архитектурой — нетривиальная задача. Хотя эти инструменты, возможно, сложны и поначалу пугают, они доступны и готовы к использованию.

Комментарии
Вам может быть интересно
В современном бизнесе важнейшую роль играет эффективное взаимодействие между компаниями, и разработка интернет-магазинов для сегмента B2B становится неотъемлемой частью этой стратегии. С развитием тех...
Рынок Китая открывает огромные возможности для российского бизнеса. Это самая кр...
Используя возможность компоновки, организации могу...
Маркетплейсы захватывают мир, но не только популяр...
Доска объявлений – это виртуальная площадка, где п...
Аутсорсинг управления IT инфраструктурой становитс...
В электронной коммерции существует две основных би...
Стратегическое планирование и консультирование в о...
В быстро развивающемся мире веб-разработки выбор п...
Изучите изменяемую инфраструктуру и неизменяемы...
Тренды CRM-маркетинга вращаются вокруг улучшения к...
Перейти вверх