Airflow의 아키텍처를 알아보자

아키텍처 개요

Airflow는 워크플로를 구축하고 실행할 수 있는 플랫폼이다. 워크플로우는 DAG(Directed Acycli Graph)로 표시되며 종속성 및 데이터 흐름을 고려하여 정렬된 Tasks라는 개별 작업을 포함한다.

image1

DAG 작업 간의 종속성과 작업을 실행하고 재시도를 실행하는 순서를 지정한다.

Airflow 설치는 일반적으로 다음 구성 요소로 구성된다.

  • 스케줄러는 예약된 워크플로우를 트리거 하고, 실행자에게 제출된 작업을 모두 처리한다.
  • 실행기(executor)는 실행 중인 작업을 처리한다. 기본으로 설치되며, 실행기는 스케줄러 내부의 모든 것을 실행하지만, 대부분의 프로덕션에 적합한 실행기는 실제로 작업 실행을 작업자(Worker)에게 푸시한다.
  • 웹서버는 검사, 트리거 및 DAG 작업의 동작을 디버깅 할 수 있도록 편리한 사용자 인터페이스를 제공한다.
  • 스케줄러와 실행자(그리고 실행자가 가지고 있는 모든 작업자)가 읽는 DAG 파일 폴더
  • 메타 데이터베이스는 상태를 저장하기 위해 스케줄러, 실행기 및 웹서버에서 사용된다.

image2

대부분의 실행 프로그램은 일반적으로 작업 대기열과 같이 작업자와 통신할 수 있도록 다른 구성 요소도 도입하지만 여전히 실행 프로그램과 작업자를 Airflow 전체에서 실제 작업 실행을 처리하는 단일 논리적 구성 요소로 생각할 수 있다.

Airflow 자체는 실행 중인 항목에 구애받지 않는다. Airflow 공급자 중 하나의 높은 수준 지원을 받거나 Shell 또는 Python Operators를 사용하는 명령으로 직접 모든 것을 오케스트레이션하고 실행할 수 있다.

워크로드

DAG는 일련의 작업을 통해 실행되며 다음과 같은 세 가지 일반적인 작업 유형이 표시된다.

  • 연산자(Operators), DAG의 대부분을 구축하기 위해 빠르게 조합 할 수 있는 사전 정의된 작업(Task)
  • Sensors는 외부 이벤트가 발생하기를 다리는 Operators의 특수 하위 클래스이다.
  • TaskFlow-decorateds는 @task 태스크로 패키지화하는 사용자 정의 파이썬 기능이다.

내부적으로 이것들은 모두 실제로 Airflow’s BaseOperator 의 하위 클래스이며, 작업(Task) 및 운영자(Operator)의 개념은 서로 약간 교환할 수 있지만, 별도의 개념으로 생각하는 것이 유용하다. 본질적으로 Operators와 Sensors는 템플릿이며 DAG 파일에서 하나를 호출할 때, 작업(Task)을 하고 있다.

제어흐름

DAG는 여러 번 실행되도록 설계되었으며, 여러 번 동시에 실행 할 수 있다. DAG는 항상 “실행” 날짜 (execution_date)를 포함하지만 다른 선택적 매개변수도 포함하여 매개변수화된다.

Task는 서로에 대해 선언된 종속성이 있다. » 및 « 연산자를 이용하여 DAG에서 이를 확인할 수 있다.

first_task >> [second_task, third_task]
third_task << fourth_task

또는

first_task.set_downstream([second_task, third_task])
third_task.set_upstream(fourth_task)

이러한 종속성은 그래프의 “edges”를 구성하고 Airflow가 작업을 실행하는 순서를 결정하는 방법이다. 기본적으로 작업은 실행되기 전에 모든 업스트림 작업이 성공 할 때까지 기다리지만 다음과 같이 사용 될 수 있다. Branching , LatestOnlyTrigger Rules 와 같은 기능을 사용하여 커스텀할 수 있다.

작업 간에 데이터를 전달하려면 두 가지 옵션이 있다.

  • XComs (“Cross-communication”)는 작업이 작은 비트의 메타 데이터를 푸시(push)하고 가져올(pull) 수 있는 시스템이다.
  • 스토리지 서비스(사용자가 실행하거나 공용 클라우드의 일부)에서 대용량 파일 업로드 및 다운로드

Airflow는 공간이 확보되면 작업자에서 실행할 작업을 전송하므로 DAG의 모든 작업이 동일한 작업자 또는 동일한 컴퓨터에서 실행된다는 보장은 없다.

DAG를 구착하면 DAG가 매우 복잡해질 수 있으므로 Airflow는 이를 보다 지속 가능하게 만들기 위한 여러 메커니즘을 제공한다. SubDAG 를 사용하면 다른 DAG에 포함(embed)할 수 있는 “재사용 가능한” DAG를 만들 수 있고 TaskGroup 을 사용하면 UI에서 작업을 시각적으로 그룹화할 수 있다.

또한 Connections & Hooks 형식으로 데이터 저장소와 같은 중앙 리소스에 대한 액세스를 쉽게 사전 구성하고 Pools 를 통해 동시성을 제한 할 수 있는 기능도 있다.

사용자 인터페이스

AIrflow에는 DAG 및 해당 작업이 수행 중인 작업을 확인하고, DAG 실행을 트리거 하고, 로그를 보고, DAG 문제의 일부 제한된 디버깅 및 해결을 수행할 수 있는 사용자 인터페이스가 함께 제공된다.

Categories:

Updated: