다수의 모델을 트레이닝 및 전/후 처리하기 위한 상황을 가정하였다. (최소 100개이상)
대부분의 스케쥴러가 muti cluster를 통해 worker를 옆으로 확장시킬 수 있는 구조이다.
airflow 역시 celery excutor를 통해 손쉽게 확장이 가능한 구조이다.
고사양의 서버 1대라면 문제없이 local excutor로 한 대의 서버에서 모든 작업을 처리할 수 있겠지만 그렇지 않을 경우에는 celery excutor를 통해 다중 서버에서 worker가 작업을 처리할 수 있다.
포스팅을 위해 집 컴퓨터로 vm을 띄워서 3대 클러스터로 구성을 했는데 큰 문제없이 잘 수행이 되었다.
node 1: postgresql, redis, airflow webserver, airflow scheduler, airflow flower, airflow worker(queue1)
node 2: airflow worker(queue2)
node 3: airflow worker(queue3)
celery excutor를 활용하기 위해 airflow meta db는 postgresql.
queue 역할은 redis.
그리고 queue ui를 위한 airflow flower.
그리고 queue 이름을 q1, q2, q3으로하여 구동했다.
airflow worker -q q1 -D
airflow worker -q q2 -D
airflow worker -q q3 -D
이렇게 구성 후 가장 기본인 dag 파일에서 bash operator를 사용하여 q1, q2, q3에 분배 테스트를 진행했는데 잘 되었다. 하지만 실무에서는 dag가 훨씬 복잡할 것이다.
그리고 subdag을 병렬로 heavy하게(수천개) 돌릴 경우 parallel 옵션을 넉넉히 주고 pool도 잘 나눠서 조절해야 task들이 멍때리지 않는다. 잘못 설계할 경우 상위 task들이 pool을 다 잡아먹고 process가 full차서 멍때리는걸 경험했다. -중요-