피드로 돌아가기
Dev.toBackend
원문 읽기
4개 프로세스를 1개로 통합한 Fitz의 내장 분산 스케줄러 설계
Cron jobs sin Celery, sin Redis, sin Beat: cómo Fitz mete un scheduler distribuido adentro del lenguaje
AI 요약
Context
Python 환경에서 Cron Job 구현 시 Celery, Redis, Beat 등 다수의 외부 의존성과 별도 프로세스 관리가 강제되는 복잡한 아키텍처 구조. 인프라 오버헤드와 Timezone 수동 계산, Broker 설정 등 단순 작업 대비 과도한 엔지니어링 비용 발생.
Technical Solution
- Broker 및 Worker 분리를 제거하고 언어 런타임 내부에 Scheduler를 통합한 단일 바이너리 구조 설계
- Decorator 기반의
@cron및@background인터페이스를 통한 비즈니스 로직과 스케줄링 설정의 결합 - Postgres DB를 활용한
fitz_cron_jobs,fitz_cron_runs테이블 자동 생성으로 실행 이력의 영속성 확보 catch_up=true옵션을 통해 시스템 다운타임 발생 시 누락된 작업의 자동 재실행 메커니즘 구현- Static Type Checking 기반의
spawn함수를 도입하여 Background Task의 인자 타입 안정성 확보 - 내장 Timezone 지원을 통한 UTC 오프셋 수동 계산 제거 및 지역 시간 기준 실행 보장
실천 포인트
- 서비스 초기 단계에서 과도한 분산 큐 도입 대신 단일 프로세스 스케줄러 검토 - 인프라 복잡성(Moving Parts) 최소화가 운영 안정성에 기여하는 지점 파악 - 단순 실행 이력 조회가 필요할 경우 전용 UI 도구 대신 기존 RDB 쿼리 활용 방안 고려 - 수평 확장(Horizontal Scaling) 필요성이 증명되기 전까지는 단순한 아키텍처 유지