Date de bazăLucru în fundal

Cozi de joburi

Cozi FIFO care nu pierd joburi când un worker se oprește, cu producători și consumatori care rulează în paralel.

LPUSH/s cu pipelining, măsurat
31.6M
joburi pierdute la o oprire bruscă
0
polling
0
Pasul 1 din 5
Producătorii adaugă joburi

Orice serviciu adaugă muncă fără să aștepte consumatorii.

Sesiune de exempluplaying
# Producătorii adaugă joburi
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

O demonstrație animată cu comenzi HotKV reale și răspunsuri de exemplu. Faceți clic pe orice pas pentru a sări la el. Comenzile și răspunsurile rămân în engleză, exact așa cum le tastați și le vedeți în HotKV.

Problema

Munca în fundal, precum e-mailurile, redimensionarea imaginilor și webhook-urile, are nevoie de o coadă între codul care o creează și codul care o execută. O coadă care pierde un job când un worker se oprește brusc în mijlocul sarcinii este mai rea decât lipsa cozii, pentru că nimeni nu observă că jobul a dispărut.

Cum o rezolvă HotKV

Listele vă oferă o coadă FIFO simplă. BLMOVE mută fiecare job pe o listă de procesare în momentul în care este predat unui worker, deci un job în curs este mereu stocat undeva dacă workerul dispare. Producătorii și consumatorii sunt serviți de thread-uri de lucru paralele.

Pas cu pas

Ce se întâmplă, comandă cu comandă

  1. 01

    Producătorii adaugă joburi

    Orice serviciu adaugă muncă fără să aștepte consumatorii.

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

    Un worker preia în siguranță un job

    BLMOVE blochează până apare un job, apoi îl mută pe o listă de procesare într-un singur pas.

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

    Confirmați când s-a terminat

    E-mailul a plecat. Jobul este eliminat din lista de procesare.

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

    Un worker se oprește brusc

    Workerul 2 se oprește în mijlocul unui job. Jobul lui este încă în lista de procesare, nu este pierdut.

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

    Puneți din nou în coadă și mergeți mai departe

    Un monitor mută jobul abandonat înapoi în coadă, iar alt worker îl preia.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Unde se potrivește

Scenarii din lumea reală

E-mail și SMS tranzacționale

Mesajele de înscriere, de chitanță și de resetare sunt puse în coadă de aplicația web și trimise de un grup de workeri.

Procesare media

Încărcările sunt puse în coadă pentru miniaturi și transcodare, iar un transcoder oprit brusc nu scapă niciodată un fișier.

Livrare de webhook-uri

Webhook-urile de ieșire sunt puse în coadă și reîncercate fără să blocheze cererea care le-a declanșat.

Integrat

Ce primiți

FIFO cu citiri blocante

LPUSH cu BRPOP, iar workerii dorm până sosește munca.

LPUSHBRPOP

Fără joburi pierdute

BLMOVE predă atomic fiecare job unei liste de procesare.

BLMOVELREM

Producători și consumatori în paralel

Producătorii și consumatorii sunt serviți de thread-uri de lucru paralele.

Aveți nevoie de mai mult?

Pentru confirmări, grupuri de consumatori și reluare, folosiți streamuri.

XADDXREADGROUP

Întrebări frecvente

Ce se întâmplă cu un job dacă un worker se oprește brusc?

Dacă preluați joburile cu BLMOVE, jobul rămâne în lista de procesare. Un monitor poate muta înapoi în coadă orice a stat acolo prea mult.

Trebuie workerii să facă polling?

Nu. BRPOP și BLMOVE blochează până sosește un job, cu un timeout opțional.

Liste sau streamuri?

Listele sunt cea mai simplă coadă. Streamurile adaugă grupuri de consumatori, confirmare pe mesaj și istoric. Vedeți cazul de utilizare Streaming de evenimente.

Cazuri de utilizare înrudite

Încercați pe propria sarcină de lucru

HotKV vorbește protocolul Redis, așa că puteți îndrepta spre el un client existent și rula aceleași comenzi.