SLA에서 Deadline Alerts로 마이그레이션하기
SLA에서 Deadline Alerts로 마이그레이션하기 (Migrating from SLA to Deadline Alerts)
기존의 SLA 기능과 새로운 Deadline Alerts 기능이 어떻게 다르게 동작하는지 설명하고, Deadline Alerts로 전환하는 방법을 안내하는 문서예요. 두 접근 방식의 핵심 차이와 동일한 동작을 하는 예시 Dag를 비교해 볼게요.
출처: 문서
본문
두 가지 다른 패러다임 (Two Different Paradigms)
SLA와 Deadline Alerts 기능의 목표는 매우 비슷하지만, 두 기능은 서로 아주 다른 접근 방식을 사용해요. 이 가이드는 주요 차이점을 정리하고 자신의 유스케이스에 가장 좋은 방식을 고르는 데 도움을 줄 거예요.
먼저 두 접근 방식을 설명한 다음, 자신의 유스케이스에 맞는 적절한 Deadline을 찾는 방법을 살펴볼게요.
SLA
Dag run이 끝나면 현재 시간을 확인해요. 시간이 (logical_date + sla)보다 크면 sla_miss_callback을 실행해요. Dag run이 끝나지 않으면 SLA는 절대 확인되지 않아요.
Deadline Alerts
Dag run이 시작되면 (DeadlineReference + interval)을 계산해 저장해요. 그리고 스케줄러 루프가 주기적으로(scheduler_heartbeat_sec으로 설정, 기본 5초) 그 시간들 중 어떤 것이 지나갔는지 확인해서 callback(**kwargs)을 실행해요.
가장 직접적인 마이그레이션 경로는 DeadlineReference.DAGRUN_LOGICAL_DATE 레퍼런스를 사용하는 것이에요. 다만 핵심 변화는 Deadline의 callback이 (계산된 만료 시간으로부터 scheduler_heartbeat_sec 이내에) "즉시" 실행되고, Dag가 먼저 끝날 때까지 기다리지 않는다는 점이에요.
동등한 예시 Dags (Equivalent Example Dags)
아래는 1시간 SLA를 사용하는 Dag와, 그에 동등한 Deadline Alerts를 사용하는 Dag예요.
SLA 예시
with DAG(
"minimal_sla_example",
default_args={"sla": timedelta(hours=1)},
sla_miss_callback=SlackWebhookNotifier(
text="SLA missed for {{ dag_run.dag_id }}",
),
):
BashOperator(task_id="long_task", bash_command="sleep 3600")
Deadline Alerts 예시
with DAG(
"minimal_deadline_example",
deadline=DeadlineAlert(
reference=DeadlineReference.DAGRUN_LOGICAL_DATE,
interval=timedelta(hours=1),
callback=AsyncCallback(
SlackWebhookNotifier,
kwargs={
text: "Deadline missed for {{ dag_run.dag_id }}",
},
),
),
):
BashOperator(task_id="long_task", bash_command="sleep 3600")
더 읽을거리 (Further Reading)
Deadline Alerts 기능에 대한 자세한 내용은 how-to 가이드를 확인해 보세요.