핵심 요약
우아한형제들이 장시간 비동기 작업을 Kafka 없이 RDB 기반 Task Queue와 Heartbeat 아키텍처로 재설계해 안정성과 재시도/복구를 개선했습니다.
구현 방법
- RDB 엑셀 생성 대기열 excel_download_request(상태: PENDING/IN_PROGRESS/DONE/FAILED, last_heartbeat_at, retry_count) 도입
- Worker가 3초 간격으로 PENDING 조회 후 Redis 분산 락으로 최대 2개 선점, IN_PROGRESS로 전환 및 Heartbeat를 1분 간격으로 갱신
- 실패 시 최대 3회 재시도, 3회 초과 시 FAILED; 실패 시 PENDING으로 되돌려 자동 재처리
- 장애 복구를 위한 Fallback Scheduler(ShedLock 적용)로 2분 이상 Heartbeat 없는 작업 재선점 및 재처리 방지
주요 결과
- 중복 발송 문제 제거 및 Kafka 의존성 제거로 운영 안정성 증가
- 배포 영향 없이 자동 복구 및 수평 확장 용이성 확보
- 폴링 기반 구조로 단순 쿼리로 모니터링 가능하고 DB 인덱스 활용으로 비용 효율성 유지
