핵심 데이터백그라운드 작업

작업 큐

워커가 죽어도 작업을 잃지 않는 FIFO 큐로, 생산자와 소비자가 병렬로 실행됩니다.

파이프라인 LPUSH/s, 실측
31.6M
충돌 시 잃는 작업
0
폴링
0
단계 1 / 5
생산자가 작업 추가

어떤 서비스든 소비자를 기다리지 않고 작업을 추가합니다.

예시 세션playing
# 생산자가 작업 추가
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

실제 HotKV 명령과 예시 응답으로 구성된 애니메이션 안내입니다. 원하는 단계를 클릭하면 해당 단계로 이동합니다. 명령과 응답은 HotKV에서 입력하고 보는 그대로 영어로 표시됩니다.

문제

이메일, 이미지 크기 조정, 웹훅 같은 백그라운드 작업에는 작업을 만드는 코드와 처리하는 코드 사이에 큐가 필요합니다. 워커가 작업 도중 충돌할 때 작업을 잃는 큐는 큐가 없는 것보다 나쁩니다. 작업이 사라진 것을 아무도 알아차리지 못하기 때문입니다.

HotKV의 해결 방식

리스트는 간단한 FIFO 큐를 제공합니다. BLMOVE는 각 작업을 워커에 넘기는 순간 처리 리스트로 옮기므로, 워커가 사라져도 진행 중인 작업은 항상 어딘가에 저장되어 있습니다. 생산자와 소비자는 병렬 워커 스레드가 처리합니다.

단계별 설명

명령 하나하나, 무슨 일이 일어나는가

  1. 01

    생산자가 작업 추가

    어떤 서비스든 소비자를 기다리지 않고 작업을 추가합니다.

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    워커가 안전하게 작업을 가져감

    BLMOVE는 작업이 생길 때까지 대기한 뒤, 한 단계로 작업을 처리 리스트로 옮깁니다.

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    완료 시 확인

    이메일이 발송되었습니다. 작업이 처리 리스트에서 제거됩니다.

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    워커 충돌

    워커 2가 작업 도중 죽습니다. 그 작업은 사라지지 않고 처리 리스트에 남아 있습니다.

    LRANGE queue:emails:processing 0 -1
  5. 05

    다시 큐에 넣고 계속

    모니터가 방치된 작업을 큐로 되돌리고, 다른 워커가 가져갑니다.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
적용 분야

실제 시나리오

트랜잭션 이메일과 SMS

가입, 영수증, 재설정 메시지를 웹 앱이 큐에 넣고 워커 풀이 발송합니다.

미디어 처리

업로드된 파일은 썸네일 생성과 트랜스코딩을 위해 큐에 들어가며, 트랜스코더가 충돌해도 파일을 절대 놓치지 않습니다.

웹훅 전송

발신 웹훅을 큐에 넣고 재시도하므로, 이를 트리거한 요청을 막지 않습니다.

내장 기능

제공되는 기능

블로킹 읽기를 갖춘 FIFO

LPUSH와 BRPOP을 사용하며, 워커는 작업이 들어올 때까지 대기합니다.

LPUSHBRPOP

작업 손실 없음

BLMOVE가 각 작업을 원자적으로 처리 리스트에 넘깁니다.

BLMOVELREM

병렬 생산자와 소비자

생산자와 소비자는 병렬 워커 스레드가 처리합니다.

더 필요하다면?

확인 응답, 컨슈머 그룹, 재생이 필요하면 스트림을 사용하십시오.

XADDXREADGROUP

자주 묻는 질문

워커가 충돌하면 작업은 어떻게 됩니까?

BLMOVE로 작업을 가져가면 작업은 처리 리스트에 남습니다. 모니터가 너무 오래 머문 작업을 큐로 되돌릴 수 있습니다.

워커가 폴링해야 합니까?

아닙니다. BRPOP과 BLMOVE는 작업이 도착할 때까지 대기하며, 선택적으로 타임아웃을 지정할 수 있습니다.

리스트와 스트림 중 무엇을 써야 합니까?

리스트는 가장 간단한 큐입니다. 스트림은 컨슈머 그룹, 메시지별 확인 응답, 기록을 더합니다. 이벤트 스트리밍 사용 사례를 참고하십시오.

관련 사용 사례

직접 워크로드로 사용해 보십시오

HotKV는 Redis 프로토콜을 사용하므로 기존 클라이언트를 연결해 같은 명령을 그대로 실행할 수 있습니다.