작업 스케줄러, 까다로운 기술적 문제들을 파헤치다!

by DD
5개월 전
조회수 18

작업 스케줄러 구축 시, Lease 기반 작업 할당, Idempotency Key 관리, Timezone 처리 등 까다로운 기술적 문제 발생

Lease를 활용한 작업 할당, Idempotency Key를 통한 중복 방지, DST(일광 절약 시간제) 변환 시의 예외 처리 등 구체적인 해결 방안 제시

커뮤니티에서는 Heartbeat 개념, Petri Nets 활용, 상태 머신 모델링 등 다양한 접근 방식과 Temporal, BullMQ와 같은 도구 활용에 대한 논의 진행

Lease 기반 작업 할당과 Heartbeat

작업 스케줄러에서 Lease는 작업의 독점적 실행을 보장하는 핵심 메커니즘이다. 구체적으로, 작업자는 Lease를 획득하여 작업 실행 중 장애 발생 시 작업을 안전하게 재할당할 수 있도록 한다. 따라서, Heartbeat 메커니즘을 통해 작업자의 생존 여부를 주기적으로 확인하고, Lease 만료 시 작업을 재할당하는 방식이 일반적이다. 반면, Lease 갱신은 오버헤드를 증가시킬 수 있으므로, 적절한 Heartbeat 간격 설정이 중요하다.

Idempotency Key와 중복 작업 방지

Idempotency Key는 중복 작업 실행을 방지하는 데 필수적이다. 구체적으로, Idempotency Key를 사용하여 동일한 작업을 여러 번 실행하는 경우에도 단일 결과만 보장한다. 따라서, Atomic Check-and-Insert 연산을 통해 경쟁 조건을 방지하고, Key의 유효 기간을 설정하여 불필요한 데이터 축적을 막아야 한다. 반면, Key의 스코핑은 큐별로 관리하여 충돌을 방지해야 한다.

Timezone 처리와 DST(일광 절약 시간제) 문제

Timezone 처리는 작업 스케줄링에서 가장 어려운 부분 중 하나이다. 구체적으로, DST(일광 절약 시간제) 변경 시 발생하는 시간의 모호성을 처리해야 한다. 따라서, UTC 시간 저장사전 계산을 통해 문제를 해결하고, DST 변환 시의 예외 상황에 대한 명확한 정책을 정의해야 한다. 결과적으로, Temporal과 같은 도구를 활용하여 복잡성을 줄일 수 있다.

The tricky parts of building a reliable job scheduler: leases, idempotency, and timezone-aware cron