BullQueue

이상민·2024년 11월 13일

TIL

목록 보기
45/50

BullQueue란?

  • BullQueue란 Node.js에서 사용하는 Redis 기반 분산 작업 큐로 분산 환경에서 작업을 처리하고 관리할 수 있다.

  • 비동기 작업을 큐에 추가하여 처리할 수 있으며, 이러한 작업은 백그라운드에서 실행되고 FIFO 방식에 따라 순서대로 처리된다.

  • Node.js에서는 @node_modules/bull package를 제공한다.

    1. 작업 관리: 큐에 작업을 추가하고, 작업의 상태를 추적하고, 작업을 실행 및 완료할 수 있다. 작업은 비동기적으로 실행되며, 결과나 상태 변경은 이벤트를 통해 처리할 수 있다.
    2. 작업 우선순위: 작업에는 우선순위를 부여할 수 있다. 우선순위에 따라 큐에서 처리되는 순서가 달라질 수 있어, 중요한 작업이 먼저 처리되도록 조절할 수 있다.
    3. 작업 재시도 및 실패 처리: 작업이 실패한 경우, BullQueue는 재시도 및 실패 처리를 지원한다. 재시도 횟수나 실패 처리 전략은 개발자가 설정할 수 있으며, 오류에 대처하고 안정적인 작업 처리를 보장할 수 있다.
    4. 작업 상태 모니터링: 작업의 상태를 모니터링하고 추적할 수 있는 기능을 제공한다. 작업의 진행 상황을 확인하고, 완료 또는 실패 여부를 확인할 수 있다.

BullQueue와 Redis의 관계

BullQueue는 Redis를 메시지 브로커로 사용하여 작업 대기열을 관리한다.

Redis는 메모리 기반의 데이터 저장소로서 속도가 빠르고, PUB/SUB(Publish/Subscribe) 메커니즘을 지원합니다. BullQueue는 이러한 Redis의 특성과 기능을 활용하여 작업의 상태, 데이터, 우선순위 등을 저장하고 관리합니다.

BullQueue는 Redis의 키-값 저장소를 활용하여 작업 정보를 저장하고, Redis의 리스트나 셋 등의 데이터 구조를 사용하여 작업 대기열을 구성합니다. 작업을 추가하면 해당 작업은 Redis에 저장되고, 작업자는 Redis에서 작업을 가져와 처리합니다. 작업의 상태 변경이나 진행 상황 업데이트는 Redis를 통해 이루어집니다.

동시성 제어 시나리오

  • 1. 서버 실행 시 consumer에서 Bull 생성, Processor 설정
  • 2. Unity Client에서 작업 처리 요청 → 요청에 해당하는 Queue에 작업 addQueue()
  • 3. Queue에 추가된 작업을 processor에서 처리
  • 4. 처리가 완료되면 서버 로직에서 해당 값을 가공
  • 5. 동시성 제어를 적용한 값을 Clinet에 전송

실제 활용 사례

  1. 이메일 전송
    • 대량 이메일 전송 작업을 분산 처리.
  2. 이미지/비디오 처리
    • 이미지 리사이징이나 비디오 인코딩 작업을 비동기로 처리.
  3. 데이터 분석
    • 데이터를 큐에 넣고 비동기로 분석 작업 수행.
  4. 스케줄링
    • 크론 작업(cron jobs)처럼 특정 시간에 반복 작업 실행.

Bull Queue의 장점

  • 간단한 API와 강력한 기능.
  • Redis를 사용해 빠르고 신뢰할 수 있음.
  • 확장성이 뛰어나고 대규모 애플리케이션에 적합.

0개의 댓글