Битва ETL-инструментов: AWS Step Functions vs. Apache Airflow

AWS Step Functions vs. Apache Airflow, Apache AirFlow примеры курсы обучение, обучение дата-инженеров, инженер данных курсы примеры обучение, тестирование DAG airflow example, инженерия данных с Apache AirFlow пример, обучение большим данным, Школа Больших Данных Учебный центр Коммерсант

В этой статье для обучения дата-инженеров сравним популярный 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.

AWS Step Functions vs. Apache Airflow
Сравнение AWS Step Functions с Apache Airflow

Apache Airflow позволяет пользователям визуально отслеживать выполнение каждого состояния и просматривать живые журналы, останавливать выполнение или возобновлять его на определенном этапе в середине. А с помощью AWS Step Functions пользователи не могут визуально отслеживать выполнение. AWS Step Functions предоставляет пользователям доступ к данным рабочего процесса, но не интегрирует их напрямую в свой интерфейс. Чтобы получить глобальное представление о своих рабочих процессах, пользователям необходимо получать метрики с помощью Amazon CloudWatch и настраивать информационные панели для визуализации этих данных. В AWS Step Functions можно остановить выполнение конечного автомата, но нельзя возобновить его на определенном этапе в середине состояния. Кроме того, в этом облачном бессерверном сервисе затруднен процесс получения доступа к журналам, т.к. он состоит из нескольких шагов и включает перенаправление в отдельную группу логов для каждой функции Lambda. Пользователи должны вручную искать смешанные логи для определенного времени выполнения.

Таким образом, несмотря на одинаковое назначение и ряд схожих возможностей AWS Step Functions и Apache Airflow, нюансы их использования существенно отличаются. Apache Airflow дает дата-инженеру больший контроль над управлением конвейерами обработки данных, включая визуализацию всех аспектов их проектирования и выполнения. А чем AirFlow лучше Unix-утилиты cron, вы узнаете здесь.

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

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://medium.com/trackit/aws-step-functions-vs-apache-airflow-d519fd8eeca9
  2. https://aws.amazon.com/ru/step-functions/
  3. https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html
Поиск по сайту