В этой статье для обучения дата-инженеров сравним популярный ETL-оркестратор Apache AirFlow с облачным бессерверным сервисом от AWS под названием Step Functions. Оба этих решения представляют собой workflow-сервисы, которые позволяют автоматизировать бизнес-процессы и упростить процедуры дата-инженерии. Читайте далее, что между ними общего и чем они отличаются, а также какой из них выбирать для практического использования.
Что такое AWS Step Functions и как это работает
Выпущенный в декабре 2016 года AWS Step Functions — это бессерверный сервис оркестрации, который позволяет разработчикам комбинировать функции AWS Lambda с другими сервисами AWS для создания настраиваемых рабочих процессов. Рабочие процессы в AWS Step Functions управляют сбоями, повторными попытками, параллельной работой, интеграцией сервисов и удобством наблюдения, позволяя разработчикам сосредоточиться на бизнес-логике. С помощью интуитивно понятной графической консоли AWS Step Functions рабочий процесс приложения отображается в виде последовательности шагов, управляемых событиями.
Прежде чем погружаться в особенности Step Functions, вспомним про конечные автоматы — математические абстракции для разработки алгоритмов. Конечный автомат считывает набор входных данных и, в зависимости от их значений, переходит в другое состояние. Сервис AWS Step Functions основан на идее конечных автоматов: он предоставляет встроенные элементы управления для отслеживания состояния каждого шага рабочего процесса и обеспечения выполнения каждой задачи в ожидаемом порядке. Язык состояний Amazon представляет собой структурированный язык на основе JSON, используемый для определения конечного автомата, набора состояний, которые могут выполнять работу (состояния задачи), определения состояний для перехода к следующим (состояния выбора), остановки выполнения с помощью error (состояния Fail) и т.д. При определении конечных автоматов вне консоли Step Functions, например, в текстовом редакторе, следует сохранить сделанные определения конечных автоматов с расширением .asl.json.
AWS Step Functions можно использовать для различных целей:
- Для создания рабочих процессов, обрабатывающих и публикующих шаблоны машинного обучения.
- Проверить выполнение задач в сервисах AWS
- Для создания долгосрочных автоматизированных рабочих процессов для приложений, требующих взаимодействия с человеком.
Прежде всего, пошаговая функция управляет компонентами и логикой приложения. Эта возможность позволяет разработчикам писать меньше кода и сосредоточить свои усилия на создании и обновлении программных решений.
AWS Step Functions предлагает два типа рабочих процессов:
- Стандартный (Standard) для краткосрочных рабочих процессов продолжительностью более 5 минут и для долгосрочных рабочих процессов, которые могут длиться до года. Это отличный выбор при выполнении долгосрочных рабочих процессов, поскольку обеспечивается доступ к истории выполнения рабочего процесса и есть возможность выполнять визуальную отладку.
- Экспресс (Express) процесс длится не более 5 минут и идеально подходит для большого количества быстрых операций, не требующих точных исторических данных. Например, задачи непрерывной обработки данных и приема данных от устройств интернета вещей (IoT, Internet of Things).
Конечный автомат в AWS Step Functions определяется с использованием форматов JSON или YAML. Например, следующий фрагмент JSON-файла показывает определение конечного автомата с названием HelloWorld:
{ "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "Next": "GoodbyeWorld", "Comment": "Run the HelloWorld Lambda function" }, "GoodbyeWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:GoodbyeFunction", "End": true, "Comment": "Run the GoodbyeWorld Lambda function" } } }
Различные этапы рабочего процесса определяются с помощью языка конечного автомата с уникальной строкой, используемой для идентификации каждого состояния. Отдельные состояния могут принимать решения на основе своих входных данных, выполнять действия и передавать выходные данные другим состояниям.
Консоль Step Functions предоставляет графическое представление конечного автомата, помогающее визуализировать логику приложения. Состояния могут выполнять различные функции в машине состояний:
- задача (Task) — выполнение задания, например выполнение лямбда-функции AWS;
- выбор (Choice) между несколькими ветвями исполнения;
- сбой (Fail) или успех (Succeed) – остановка выполнения с ошибкой или успехом;
- передача (Pass) – ввод данные;
- ожидание (Wait) — задержка на некоторый период времени или до указанной даты/времени;
- распараллеливание (Parallel) — запуск параллельных взлетно-посадочных полос.
- Сопоставление (Map) — динамическое повторение шагов.
Подобно Apache AirFlow, AWS Step Functions работает по принципу drag-and-drop, позволяя проектировать конвейер обработки данных в графическом виде.
Сравнение с Apache Airflow
В отличие от AWS Step Functions, у которого есть собственный язык для определения рабочих процессов, Apache Airflow основан на Python, где каждая задача направленного ациклического графа (DAGб Directed Acyclic Graph) представлена классом Python. Определение и выполнение всего рабочего процесса выполняются в одном месте. Например, следующий код на Python показывает определение DAG под названием «Hello World!»:
from datetime import datetime from airflow import DAG from airflow.operators.dummy_operator import DummyOperator from airflow.operators.python_operator import PythonOperatordef print_hello(): return 'Hello world!'dag = DAG('hello_world', description='Simple tutorial DAG', schedule_interval='0 12 * * *', start_date=datetime(2017, 3, 20), catchup=False)dummy_operator = DummyOperator(task_id='dummy_task', retries=3, dag=dag)hello_operator = PythonOperator(task_id='hello_task', python_callable=print_hello, dag=dag)dummy_operator >> hello_operator
Главная разница между Apache Airflow и AWS Step Functions заключается в том, что Apache Airflow не является бессерверным. Поэтому при работе с этим batch-оркестратором необходимо развернуть инфраструктуру для размещения сервиса и выстроить логику управления доступом пользователей. Кроме того, Apache Airflow можно настроить в частной сети, чтобы разрешить доступ через VPN. В любом случае, использование Apache Airflow увеличивает затраты, поскольку служба не является бессерверной, а требует усилий на развертывания и обслуживание инфраструктуры.
Несмотря на этот очевидный недостаток, Apache Airflow считается самым популярным инструментом современного дата-инженера, т.к. он предлагает функции, не предоставляемые AWS Step Functions, особенно на уровне визуализации задач. Apache Airflow использует простой интерфейс, предоставляя пользователям глобальную визуализацию всех рабочих процессов и доступ к сводке всех выполняемых DAG.
Apache Airflow позволяет пользователям визуально отслеживать выполнение каждого состояния и просматривать живые журналы, останавливать выполнение или возобновлять его на определенном этапе в середине. А с помощью AWS Step Functions пользователи не могут визуально отслеживать выполнение. AWS Step Functions предоставляет пользователям доступ к данным рабочего процесса, но не интегрирует их напрямую в свой интерфейс. Чтобы получить глобальное представление о своих рабочих процессах, пользователям необходимо получать метрики с помощью Amazon CloudWatch и настраивать информационные панели для визуализации этих данных. В AWS Step Functions можно остановить выполнение конечного автомата, но нельзя возобновить его на определенном этапе в середине состояния. Кроме того, в этом облачном бессерверном сервисе затруднен процесс получения доступа к журналам, т.к. он состоит из нескольких шагов и включает перенаправление в отдельную группу логов для каждой функции Lambda. Пользователи должны вручную искать смешанные логи для определенного времени выполнения.
Таким образом, несмотря на одинаковое назначение и ряд схожих возможностей AWS Step Functions и Apache Airflow, нюансы их использования существенно отличаются. Apache Airflow дает дата-инженеру больший контроль над управлением конвейерами обработки данных, включая визуализацию всех аспектов их проектирования и выполнения. А чем AirFlow лучше Unix-утилиты cron, вы узнаете здесь.
Код курса
ADH-AIR
Ближайшая дата курса
Продолжительность
ак.часов
Стоимость обучения
0 руб.
Освойте администрирование и эксплуатацию Apache AirFlow для аналитики больших данных на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники