피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Durable Objects alarm loop 최적화를 통한 CPU 점유율 60% 절감
My Durable Objects alarm loop burned CPU for 3 days before I noticed — here's what the docs miss
AI 요약
Context
Cloudflare Durable Objects의 alarm() 핸들러 내 예외 발생 시 플랫폼의 Exponential Backoff 정책이 작동하는 구조. 하지만 재시도 간격의 상한선(Ceiling) 존재로 인해 실패한 핸들러가 무한히 실행되며 CPU 자원을 낭비하는 병목 현상 발생.
Technical Solution
- 플랫폼 제어 방식에서 사용자 정의 스케줄링 방식으로 전환하여 제어권 확보
- try-catch 문을 통한 예외 캡처 및 플랫폼의 자동 재시도 메커니즘 차단
- setAlarm() API를 활용한 수동 재스케줄링으로 고정된 대기 시간(60초) 강제 적용
- 외부 API Rate Limit 준수를 위한 명시적 재시도 주기 설정
- Alarm timestamp가 storage state로 취급되어 Object를 유지시키는 특성을 활용한 Heartbeat 구조 설계
- Non-idempotent 작업 처리를 위한 Alarm Tombstoning 기법 검토
실천 포인트
1. Durable Objects alarm() 내부의 모든 로직을 try-catch로 감싸 플랫폼의 무한 재시도 루프 방지
2. 외부 API 연동 시 플랫폼 백오프 대신 서비스 제한에 맞춘 수동 setAlarm() 주기 설정
3. Object 삭제 시 Alarm timestamp 잔존 여부를 확인하여 의도치 않은 리소스 유지 방지