Migrating from a Monolithic Orchestrator to Apache Airflow (Helpshift)
Author: Poorva Patil (Helpshift) | Source: Medium (Helpshift Engineering) | Published: 2026-06-03
한 줄 요약
Clojure 기반 모놀리식 스케줄러(한 step 실패 시 전체 잡 종료, 스텝별 모니터링 부재)를 Apache Airflow로 마이그레이션해, 오케스트레이션과 비즈니스 로직을 분리하고 관측성·장애 격리·복구를 개선.
핵심 주장/내용
- 레거시: 모든 이벤트 파이프라인을 묶은 단일 Clojure 모놀리식 스케줄러가 Lambda → EMR에 단일 monolithic step 추가 → 한 파이프라인 실패 시 전체 실패. 스텝별 모니터링 없어 on-call 시 원인 파악 곤란
- 필요했던 것: ① 단순한 온보딩(Python DAG가 Clojure보다 읽기 쉬움) ② 한 실패가 전체를 죽이지 않는 fault isolation ③ 명확한 가시성·실패 step만 재실행
- Airflow 선택 이유: 이미 프로덕션 사용 중(인프라 문제 아닌 워크플로 문제에 집중), task-level 로그/retry/timeline 관측성, retry/backfill/scheduling 내장, 오케스트레이션과 비즈니스 로직 분리(DAG = 조율, Spark/Hive/Presto = 독립 실행)
- 마이그레이션 모델: Airflow가 EMR 클러스터 생성 → EMR operator로 step 제출 → EmrStepSensor 폴링 → 완료 시 transient 클러스터 종료(EmrTerminateJobFlowOperator, idle 비용 방지)
- 점진적 롤아웃: 저위험 워크플로 먼저, 레거시와 Airflow 병렬 운영, 실행 시간·EMR instance-hour·완료율·실패 패턴 비교 후 중요 파이프라인 점진 이전
주요 수치 / 사실
- 레거시 컴포넌트: Clojure 모놀리식 + Lambda + EMR 단일 step
- 컴퓨트는 transient EMR(Spark/Hive/Presto)에서 독립 실행, Airflow는 조율만
- 로그는 S3·CloudWatch 연동, Airflow task → EMR step 로그로 직접 네비게이션
관련 위키
Source: 원문 보기