피드로 돌아가기
Celery loses 8% of your tasks by default. Here's the reliability layer I built to fix that.
Dev.toDev.to
Backend

Celery 작업 손실 8%를 0%로 낮춘 Phoenix Pattern 설계

Celery loses 8% of your tasks by default. Here's the reliability layer I built to fix that.

Kolade Fajimi2026년 6월 2일8advanced

Context

Celery의 기본 설정인 task_acks_late=False로 인한 Worker crash 시 작업 유실 발생. task_acks_late=True 설정 시에는 Redis Broker의 visibility_timeout으로 인해 재처리까지 최대 1시간의 과도한 Latency가 발생하는 한계 존재.

Technical Solution

  • Redis TTL 기반의 Heartbeat 등록 및 주기적 갱신을 통한 Worker 생존 상태 모니터링
  • Expired Heartbeat를 감지하여 Orphaned Task를 전용 재처리 큐로 즉시 복구하는 Resurrector 구조 설계
  • GC Pause 등으로 인한 Zombie Worker의 stale result commit을 방지하기 위한 Fence Token 도입
  • Lua Script를 활용하여 Fence Token 일치 여부를 원자적으로 검증하는 Write-barrier 메커니즘 구현
  • 중복 실행 방지를 위해 Task 논리 키 기반의 Idempotency 체크 로직 추가
  • Redis AOF persistence 및 noeviction 정책 강제를 통한 데이터 영속성 보장

- Celery 사용 시 task_acks_late 설정에 따른 Trade-off(데이터 유실 vs 복구 지연) 분석 - Distributed Lock 기반의 Heartbeat 메커니즘 적용 가능성 검토 - 상태 변경 API 설계 시 Fence Token이나 Versioning을 통한 Optimistic Locking 적용 - Redis를 메시지 브로커로 사용할 경우 maxmemory-policy가 noeviction인지 확인

원문 읽기