Apache Airflow

[Airflow] Dag 직렬화 (Serialization)

비번변경 2023. 10. 27. 19:59

직렬화

직렬화(Serialization)란 데이터 구조나 객체 상태를 나중에 재구성할 수 있는 형식으로 변환하는 과정을 말한다. 다르게 말하면 객체를 바이트 스트림으로 인코딩하는 과정으로, 직렬화된 데이터는 동일하거나 다른 환경에 저장될 수 있다. 

반대로 직렬화된 데이터를 개체나 데이터 구조로 다시 재구성하는 과정, 인코딩 되어있는 바이트 스트림으로부터 객체를 복원하는 과정을 역직렬화(Deserialization)라고 한다.

 

 

Airflow 1 DAG 프로세싱

Airflow는 DAG_FOLDER 내 DAG 정의 파일을 읽어 들이고 처리한다.

Airflow 1에서는 DAG를 스케쥴링하고 UI로 표시하기 위해 스케쥴러와 웹 서버 모두 DAG 정의 파일에 접근해 처리해야 했다.

웹 서버를 시작/재시작하는 경우에도 DAG를 표시하기 위해 DAG 프로세싱을 수행해야 하므로 웹 서버 프로세스의 로딩 시간과 메모리 사용을 키우는 원인이었다.

 

이러한 부분을 해결하기 위해 Airflow 2에서는 DAG를 직렬화하여 처리하도록 변경되었다. 조금 더 정확하게 말하자면, Airflow 1.10.7에서 도입되어 Aiflow 2에서는 필수적으로 사용한다.

 

 

Airflow 2 DAG 프로세싱

Airflow 2에서는 웹 서버 경량화를 위해 DAG를 직렬화함으로써 웹 서버에서 DAG 프로세싱을 처리하지 않을 수 있도록 변경되었다.

스케쥴러의 DagFileProcessor가 DAG 정의 파일을 처리해 JSON 형식으로 직렬화한 후 Airflow MetaData DB SerializedDagModel에 저장한다. 따라서 웹 서버는 DAG 정의 파일을 처리할 필요 없이 직렬화된 DAG 데이터를 읽고 역직렬화한 뒤 UI로 표시한다.

또한 웹 서버가 시작할 때 전체 DAG를 로드하는 대신 Serialized Dag 테이블에서 필요한 DAG가 로드함으로써 웹 서버의 로딩 시간과 메모리 사용을 줄일 수 있게 되었다.

DAG 정의 파일을 Airflow MetaData DB에 저장하면 웹 서버를 DAG 정의 파일과 독립적으로 만들 수 있다. 데이터는 DB 내 DagCode에 저장된다.

 

 

DAG 직렬화 관련 설정

DAG 직렬화 관련 설정은 core 섹션에 포함된다.

[core]

# You can also update the following default configurations based on your needs
min_serialized_dag_update_interval = 30
min_serialized_dag_fetch_interval = 10
max_num_rendered_ti_fields_per_task = 30
compress_serialized_dags = False
  • min_serialized_dag_update_interval : DB에 저장된 직렬화된 DAG가 업데이트되어야 하는 최소 주기(초). DB 쓰기 속도를 제어할 수 있다.
  • min_serialized_dag_fetch_interval : 직렬화된 DAG가 Webserver에 이미 로드되어 있을 때, DB에서 다시 가져오는 주기. 값을 높게 설정하면 DB에 가해지는 부하는 줄어들지만 이전에 캐싱된 오래된 버전의 DAG가 보일 수 있다.
  • max_num_rendered_ti_fields_per_task : DB에 저장할 Task당 Rendered Task Instance Fields (Template Fields)의 최대 개수
  • compress_serialized_dags : 직렬화된 DAG를 DB에 적재할 때 압축 여부. 클러스터 내에 매우 큰 DAG들이 존재하는 경우 유용하지만, DAG 종속성 보기(DAG dependencies view)가 비활성화된다..

 

 

참고 문서

직렬화

https://wookiist.dev/168

https://brunch.co.kr/@oemilk/179

https://airflow.apache.org/docs/apache-airflow/stable/administration-and-deployment/dag-serialization.html

728x90