KerndataAchtergrondwerk

Jobwachtrijen

FIFO-wachtrijen die geen jobs verliezen wanneer een worker sterft, met producers en consumers die parallel draaien.

LPUSH/s met pipelining, gemeten
31.6M
jobs verloren bij een crash
0
polling
0
Stap 1 van 5
Producers pushen jobs

Elke service voegt werk toe zonder op consumers te wachten.

Voorbeeldsessieplaying
# Producers pushen jobs
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

Een geanimeerde walkthrough met echte HotKV-commando's en voorbeeldantwoorden. Klik op een stap om ernaartoe te springen. Commando's en antwoorden blijven Engels, precies zoals je ze in HotKV typt en ziet.

Het probleem

Achtergrondwerk zoals e-mails, het verkleinen van afbeeldingen en webhooks heeft een wachtrij nodig tussen de code die het maakt en de code die het uitvoert. Een wachtrij die een job verliest wanneer een worker halverwege crasht, is erger dan geen wachtrij, want niemand merkt dat de job weg is.

Hoe HotKV het aanpakt

Lijsten geven je een eenvoudige FIFO-wachtrij. BLMOVE verplaatst elke job naar een verwerkingslijst op het moment dat hij aan een worker wordt gegeven, zodat een job in uitvoering altijd ergens is opgeslagen als die worker verdwijnt. Producers en consumers worden bediend door parallelle workerthreads.

Stap voor stap

Wat er gebeurt, commando voor commando

  1. 01

    Producers pushen jobs

    Elke service voegt werk toe zonder op consumers te wachten.

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

    Een worker claimt veilig een job

    BLMOVE blokkeert totdat er een job beschikbaar is en verplaatst hem dan in één stap naar een verwerkingslijst.

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

    Bevestigen wanneer klaar

    De e-mail is verstuurd. De job wordt uit de verwerkingslijst verwijderd.

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

    Een worker crasht

    Worker 2 sterft halverwege een job. Zijn job staat nog in de verwerkingslijst, niet verloren.

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

    Opnieuw in de wachtrij en doorgaan

    Een monitor zet de verlaten job terug in de wachtrij en een andere worker pakt hem op.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Waar het past

Praktijkscenario's

Transactionele e-mail en sms

Aanmeldings-, ontvangst- en resetberichten worden door de webapp in de wachtrij gezet en door een pool workers verstuurd.

Mediaverwerking

Uploads staan in de wachtrij voor het maken van thumbnails en transcoderen, en een gecrashte transcoder laat nooit een bestand vallen.

Webhooklevering

Uitgaande webhooks worden in de wachtrij gezet en opnieuw geprobeerd zonder het verzoek te blokkeren dat ze veroorzaakte.

Ingebouwd

Wat je krijgt

FIFO met blokkerende reads

LPUSH met BRPOP, en workers slapen totdat er werk binnenkomt.

LPUSHBRPOP

Geen verloren jobs

BLMOVE geeft elke job atomair door aan een verwerkingslijst.

BLMOVELREM

Parallelle producers en consumers

Producers en consumers worden bediend door parallelle workerthreads.

Meer nodig?

Gebruik streams voor bevestigingen, consumer groups en replay.

XADDXREADGROUP

Veelgestelde vragen

Wat gebeurt er met een job als een worker crasht?

Als je jobs claimt met BLMOVE, staat de job in de verwerkingslijst. Een monitor kan alles wat er te lang staat terugzetten in de wachtrij.

Moeten workers pollen?

Nee. BRPOP en BLMOVE blokkeren totdat er een job binnenkomt, met een optionele time-out.

Lijsten of streams?

Lijsten zijn de eenvoudigste wachtrij. Streams voegen consumer groups, bevestiging per bericht en geschiedenis toe. Zie de use case eventstreaming.

Verwante use cases

Probeer het op je eigen workload

HotKV spreekt het Redis-protocol, dus je kunt een bestaande client erop richten en dezelfde commando's uitvoeren.