콘텐츠로 이동

Queues 도메인 분산 및 Worker 역할

Queues 도메인 분산 및 Input/Output Worker 역할

섹션 제목: “Queues 도메인 분산 및 Input/Output Worker 역할”

문서 버전: 1.0
목적: Seed Queue Consumer가 추출한 도메인을 Edge에서 어떻게 처리하는지, “도메인 1개 = 1 Worker” 분산 구조와 Input(Producer) / Output(Consumer) Worker 구분을 정리한 확정 설계 문서.


  • 파일 1개 → SEED_QUEUE 메시지 1건 → Seed Consumer 1회 실행.
  • Seed Consumer는 그 파일에서 도메인 N개(예: 200개)를 추출한 뒤, DOMAIN_QUEUE에 메시지 N건(200건)을 전송.
  • 도메인 1개 → DOMAIN_QUEUE 메시지 1건 → Domain Consumer 1회 실행.

따라서 “200개 도메인”은 이미 200개의 Queue 메시지로 나뉘어 있고, 각 메시지는 별도 Domain Consumer Worker에서 처리된다.
즉, **“한 파일에 200개 도메인 → 200개 Worker가 도메인 1개씩 처리”**하는 구조로 기획·구현되어 있다.


단계트리거역할메시지 단위
1. 오케스트레이션HTTP POST /seeds/orchestrateSEED_QUEUE (Producer)R2 raw 파일 목록 조회 → 파일 1개당 메시지 1건 전송1 file
2. 파일 처리SEED_QUEUE (Consumer)DOMAIN_QUEUE (Producer)raw 파일 1개 읽기·파싱·도메인 추출 → 도메인 1개당 메시지 1건 전송1 file → N domains
3. 도메인 처리DOMAIN_QUEUE (Consumer)도메인 1개당 robots.txt·sitemap 수집·R2 저장1 domain

3. Seed Queue Consumer가 실제로 하는 일

섹션 제목: “3. Seed Queue Consumer가 실제로 하는 일”

3.1 “200개 도메인을 한 Worker에서 처리”가 아님

섹션 제목: “3.1 “200개 도메인을 한 Worker에서 처리”가 아님”

Seed Consumer(파일 1개 = Worker 1회)가 하는 일:

  1. R2에서 raw 파일 1개 읽기 (get 1회)
  2. JSON 파싱·스키마 검증 (메모리 내 처리)
  3. 도메인 목록 추출 (루프, 메모리 내)
  4. 도메인마다 DOMAIN_QUEUE.send(...) 호출 (N회, 예: 200회)
  5. 성공 시 {file_path}.success 기록 (put 1회)

도메인당 외부 HTTP 요청(robots.txt, sitemap 등)은 하지 않는다.
그런 작업은 Domain Queue Consumer에서만 수행한다.

  • Seed Consumer: R2 1회 읽기 + JSON 파싱 + 도메인 추출 + N회 queue.send (예: 200회).
  • Domain Consumer: 도메인 1개당 HTTP 2회(robots, sitemap) + R2 쓰기. 이미 도메인 1개 = Worker 1회로 분산되어 있음.

  • Producer(입력 측): 큐에 메시지를 보내는 쪽.
  • Consumer(출력 측): 큐에서 메시지를 받아 처리하는 쪽. 동일 Worker 스크립트가 여러 큐에 대해 Producer이자 Consumer일 수 있음.
구분Input(Producer)Output(Consumer)
파일 단위 작업SEED_QUEUEOrchestrator (HTTP POST /seeds/orchestrate)Seed Consumer
도메인 단위 작업DOMAIN_QUEUESeed Consumer (파일 처리 중 DOMAIN_QUEUE.send N회)Domain Consumer
  • wrangler 설정: max_batch_size: 1 → 파일 1개당/도메인 1개당 Consumer 1회.

질문결론
Seed Consumer가 200개 도메인을 한 Worker에서 전부 처리하는가?아니오. 200개는 DOMAIN_QUEUE로 200건 메시지가 되고, Domain Consumer가 도메인 1개씩 처리한다.
200개를 여러 Worker로 나누어 실행하는가?예. DOMAIN_QUEUE + max_batch_size: 1 + Consumer concurrency로 **이미 “한 도메인씩 여러 Worker”**로 분산된다.
Input / Output Worker가 구분되는가?예. SEED_QUEUE·DOMAIN_QUEUE 각각 Producer(Input)와 Consumer(Output)가 역할별로 구분되어 있다.
  • Seed Consumer: 파일 1개에 대해 R2 읽기 + 파싱 + 도메인 추출 + N회 DOMAIN_QUEUE.send (HTTP 200회가 아님).
  • Domain Consumer: 도메인 1개에 대해 HTTP(robots/sitemap) + R2 저장 → 이미 N개 Worker로 분산됨.