What is Airflow?
Airflow는 Workflow를 작성, 관리, 실행시켜주는 플랫폼이다. 여기서 Workflow는 Task들이 흐르는 순서와 방향을 정의해놓은 Graph이다. Airflow는 이런 Workflow들을 원하는 시점에 실행시켜주고, 진행 상황을 모니터링하고 결과물을 관리하기 위한 UI를 제공한다.
비슷한 역할을 하는 툴은 Linux의 Crontab이 있다. Crontab은 단순히 특정 시점에 특정 명령을 수행하는 역할을 하지만, Airflow는 그 명령들을 묶어 구조화할 수 있으며, 실행 과정과 결과를 관찰할 수 있고, 과거의 특정 시점부터 재실행하는 (Backfill) 기능또한 제공한다는 차이점이 있다.
Airflow는 이러한 특성때문에 데이터 엔지니어링 분야에서 자주 쓰이며, MLOps에서도 Batch성 작업을 수행하는데에 사용된다. 예를 들어, Airflow를 이용해 데이터를 가져와 Feature Store에 저장하는 작업(ETL)을 주기적으로 수행할 수도 있고, 특정 시점마다 모델을 재 학습 시킬수도 있다.
Components of Airflow
DAG(Directed Acyclic Graph)
Airflow는 DAG라는 개념을 이용해 Task를 관리한다. DAG는 이름에서 알 수 있듯이 방향이 있고(Directed), 순환하지 않는(Acyclic) Graph이다. 한 방향으로만 흐르며 순서에 맞게 Task를 수행한다.
Architecture
아래는 Airflow의 기본적인 구조이다. Scheduler가 DAG Directory에서 DAG를 읽어 Worker에게 실행 시키는 동시에 Webserver를 통해 상황을 UI로 보여준다. (즉 여러 컴포넌트가 유기적으로 동작하는 플랫폼이어서 Docker로 실행시킬경우 Docker Compose를 이용하는게 편하다)
Scheduler
Scheduled Workflow들의 Trigger를 관리하고, Executer에게 Task들을 실행하라고 전달한다.
Executor
실행중인 Task들을 관리한다. Default는 Sceduler안에서 Task가 동작하지만, Production에선 일반적으로 별도의 Worker들을 두어 실행시킨다.
Webserver
DAG와 Task들을 실행, 디버깅 시키기위한 UI를 제공한다.
DAG Directory
Scheduler와 Executor가 사용하는 DAG를 읽어오는 폴더이다.
Metadata Database
Scheduler, Executor, Webserver가 상태를 저장하기 위해 사용하는 DB이다.