피드로 돌아가기
Dev.toInfrastructure
원문 읽기
KV의 Eventual Consistency를 극복한 Durable Object 기반 Strong Consistency Lock 설계
KV locks for Workers cron jobs will silently fail — here's what I use instead
AI 요약
Context
Cloudflare Workers Cron Job 실행 중 응답 지연으로 인한 중복 실행 발생. KV 기반 분산 락을 도입했으나, PoP 간 복제 지연으로 인한 Eventual Consistency 문제로 12K writes/min 환경에서 Race Condition 발생 및 D1 Database의 UNIQUE 제약 조건 충돌 유발.
Technical Solution
- Strong Consistency 보장을 위해 단일 인스턴스로 동작하는 Durable Object(DO)를 Lock 매니저로 채택
- DO 내부에 locked_until 타임스탬프를 저장하여 시간 기반의 원자적 상태 관리 구현
- 현재 시간과 locked_until 비교를 통해 락 획득 실패 시 HTTP 423 상태 코드를 반환하는 제어 로직 설계
- Worker Wall Clock Limit(30s)을 고려하여 TTL을 55초로 설정함으로써 프로세스 비정상 종료 시 자동 복구 구조 확보
- wrangler.toml 내 migrations 설정을 통해 DO 바인딩 런타임 에러를 방지하는 구성 적용
실천 포인트
- 분산 환경에서 엄격한 상호 배제(Mutual Exclusion)가 필요한 경우 Eventual Consistency 저장소(KV 등) 사용 지양 - 락 설계 시 프로세스 Crash를 대비한 적절한 TTL(Time-to-Live) 설정 여부 검토 - 인프라 설정 파일(wrangler.toml)의 Migration 정의 누락으로 인한 런타임 바인딩 오류 가능성 확인