피드로 돌아가기
My Durable Objects alarm loop burned CPU for 3 days before I noticed — here's what the docs miss
Dev.toDev.to
Infrastructure

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

강해수2026년 6월 26일2intermediate

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 잔존 여부를 확인하여 의도치 않은 리소스 유지 방지

원문 읽기