콘텐츠로 이동

D1-less Distributed Pipeline Design

Cloudflare R2와 Workers를 활용한 D1-less 고성능 분산 파이프라인 설계 문서입니다. 데이터베이스 없이도 수백만 건의 데이터를 안정적으로 처리하고, 중단 지점부터 완벽히 재개할 수 있는 Stateless Checkpointing 기술을 핵심으로 합니다.


단일 소스 파일(raw.json) 내의 대량 도메인 정보를 수천 개의 병렬 Worker로 분산 처리하는 Fan-out 아키텍처를 따릅니다.

  • Orchestrator (Producer): R2 파티션을 스캔하고 처리 대상 파일을 큐에 발송.
  • Cloudflare Queues: 작업 메시지의 신뢰성 있는 전달 및 부하 분산.
  • Domain Worker (Consumer): 개별 도메인 분석(robots, sitemap 수집) 및 결과 저장.
  • R2 Storage: 원본 데이터, 결과 JSON, 작업 상태(Success Tag) 저장소.

2. Stateless Checkpointing: R2 Success 태그

섹션 제목: “2. Stateless Checkpointing: R2 Success 태그”

D1 없이 작업 연속성을 보장하기 위해 R2를 상태 저장소로 활용합니다.

  • Success Flag: 특정 청크(raw_NNNN.json)의 모든 처리가 완료되면 동일 경로에 raw_NNNN.json.success 파일을 생성합니다.
  • Just-in-Time Verification: Orchestrator는 사전 체크 없이 모든 경로를 큐에 던지고, Consumer Worker가 실행 직전에 성공 여부를 확인합니다.
  • Idempotency (멱등성): 동일 메시지가 중복 전달되어도 .success 파일이 있으면 로직을 건너뛰어 중복 연산을 방지합니다.
  • Resiliency (복구력): 시스템 중단 후 재시작 시, 완료된 작업은 자동 스킵되고 미완료 작업만 실행됩니다.

  1. Orchestrator: wrangler r2 object listraw_NNNN.json 목록 확보 후 즉시 Queue로 발송.
  2. Consumer Worker: R2.head().success 파일 존재 여부를 가장 먼저 확인.
    • 파일 존재 시: 즉시 Early Exit (성공 처리).
    • 파일 미존재 시: 도메인 분석(robots.txt, sitemap.xml 추출) 수행.
  3. Completion: 작업 성공 시 최종 결과물과 함께 .success 파일을 업로드하여 발자국을 남깁니다.

4. 데이터 배치 및 파티셔닝 (Hive-style)

섹션 제목: “4. 데이터 배치 및 파티셔닝 (Hive-style)”
  • Source: datasets/country={cc}/category={cat}/date=YYYY-MM-DD/raw_NNNN.json
  • Result: processing/country={cc}/category={cat}/date=YYYY-MM-DD/ (domain_metadata.json, robots.txt, sitemap.xml 등)
  • Status: datasets/.../raw_NNNN.json.success (빈 파일)