Dados essenciaisTrabalho em segundo plano

Filas de jobs

Filas FIFO que não perdem jobs quando um worker morre, com produtores e consumidores rodando em paralelo.

LPUSH/s com pipelining, medido
31.6M
jobs perdidos em uma falha
0
polling
0
Etapa 1 de 5
Os produtores enviam jobs

Qualquer serviço adiciona trabalho sem esperar pelos consumidores.

Sessão de exemploplaying
# Os produtores enviam jobs
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

Uma demonstração animada com comandos reais do HotKV e respostas de exemplo. Clique em qualquer etapa para ir direto a ela. Os comandos e as respostas ficam em inglês, exatamente como você os digita e vê no HotKV.

O problema

O trabalho em segundo plano, como e-mails, redimensionamento de imagens e webhooks, precisa de uma fila entre o código que o cria e o código que o executa. Uma fila que perde um job quando um worker cai no meio da tarefa é pior do que nenhuma fila, porque ninguém percebe que o job sumiu.

Como o HotKV resolve

As listas dão a você uma fila FIFO simples. BLMOVE move cada job para uma lista de processamento no momento em que ele é entregue a um worker, então um job em andamento está sempre armazenado em algum lugar se esse worker desaparecer. Produtores e consumidores são atendidos por worker threads paralelas.

Passo a passo

O que acontece, comando por comando

  1. 01

    Os produtores enviam jobs

    Qualquer serviço adiciona trabalho sem esperar pelos consumidores.

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

    Um worker assume um job com segurança

    BLMOVE bloqueia até haver um job disponível e depois o move para uma lista de processamento em uma etapa.

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

    Confirme ao terminar

    O e-mail foi enviado. O job é removido da lista de processamento.

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

    Um worker cai

    O worker 2 morre no meio do job. O job dele continua na lista de processamento, não se perde.

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

    Recoloque na fila e siga em frente

    Um monitor move o job abandonado de volta para a fila, e outro worker o assume.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Onde se encaixa

Cenários reais

E-mails e SMS transacionais

Mensagens de cadastro, recibo e redefinição são enfileiradas pelo app web e enviadas por um pool de workers.

Processamento de mídia

Os uploads entram na fila para gerar miniaturas e transcodificar, e um transcodificador que cai nunca perde um arquivo.

Entrega de webhooks

Os webhooks de saída são enfileirados e reenviados sem bloquear a requisição que os disparou.

Integrado

O que você ganha

FIFO com leituras bloqueantes

LPUSH com BRPOP, e os workers dormem até chegar trabalho.

LPUSHBRPOP

Nenhum job perdido

BLMOVE entrega cada job a uma lista de processamento de forma atômica.

BLMOVELREM

Produtores e consumidores em paralelo

Produtores e consumidores são atendidos por worker threads paralelas.

Precisa de mais?

Para confirmações, grupos de consumidores e replay, use streams.

XADDXREADGROUP

Perguntas frequentes

O que acontece com um job se um worker cair?

Se você assume os jobs com BLMOVE, o job fica na lista de processamento. Um monitor pode mover de volta para a fila tudo o que estiver lá há tempo demais.

Os workers precisam fazer polling?

Não. BRPOP e BLMOVE bloqueiam até chegar um job, com um timeout opcional.

Listas ou streams?

As listas são a fila mais simples. Os streams acrescentam grupos de consumidores, confirmação por mensagem e histórico. Veja o caso de uso de streaming de eventos.

Casos de uso relacionados

Experimente com a sua própria carga de trabalho

O HotKV fala o protocolo Redis, então você pode apontar um cliente existente para ele e executar estes mesmos comandos.