कोर डेटाबैकग्राउंड काम

Job Queues

FIFO queues जो worker के मरने पर jobs नहीं खोतीं, और जिनमें producers और consumers parallel चलते हैं।

LPUSH/s pipelined, मापा गया
31.6M
crash पर खोई jobs
0
polling
0
कदम 1 में से 5
Producers jobs push करते हैं

कोई भी सेवा consumers का इंतज़ार किए बिना काम जोड़ देती है।

उदाहरण सेशनplaying
# Producers jobs push करते हैं
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

असली HotKV कमांड और उदाहरण रिस्पॉन्स के साथ एक एनिमेटेड वॉकथ्रू। किसी भी कदम पर क्लिक करके वहां पहुंचें। कमांड और रिस्पॉन्स अंग्रेज़ी में ही रहते हैं, ठीक वैसे जैसे आप HotKV में टाइप करते और देखते हैं।

समस्या

ईमेल, इमेज resize और webhooks जैसे background काम को बनाने वाले कोड और करने वाले कोड के बीच एक queue चाहिए। जो queue worker के बीच में crash होने पर job खो दे, वह queue न होने से भी बुरी है, क्योंकि किसी को पता ही नहीं चलता कि job गायब हो गई।

HotKV इसे कैसे संभालता है

Lists एक सरल FIFO queue देती हैं। BLMOVE हर job को worker को सौंपते समय processing list में डाल देता है, इसलिए worker गायब हो जाए तो भी चल रही job कहीं न कहीं सुरक्षित रहती है। Producers और consumers को parallel worker threads संभालते हैं।

कदम दर कदम

क्या होता है, कमांड दर कमांड

  1. 01

    Producers jobs push करते हैं

    कोई भी सेवा consumers का इंतज़ार किए बिना काम जोड़ देती है।

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

    Worker सुरक्षित तरीके से job लेता है

    BLMOVE तब तक रुकता है जब तक कोई job उपलब्ध न हो, फिर उसे एक ही चरण में processing list में ले जाता है।

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

    काम पूरा होने पर acknowledge करें

    ईमेल चला गया। Job को processing list से हटा दिया जाता है।

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

    एक worker crash होता है

    Worker 2 job के बीच में मर जाता है। उसकी job अब भी processing list में है, खोई नहीं।

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

    दोबारा queue में डालें और आगे बढ़ें

    एक monitor छोड़ी गई job को वापस queue में डाल देता है और कोई दूसरा worker उसे उठा लेता है।

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
कहां फ़िट बैठता है

असली परिदृश्य

Transactional ईमेल और SMS

Sign-up, रसीद और reset संदेश web app queue में डालती है और workers का पूल उन्हें भेजता है।

Media processing

Uploads को thumbnail और transcoding के लिए queue में डाला जाता है, और crash हुआ transcoder कभी कोई फ़ाइल नहीं गिराता।

Webhook डिलीवरी

बाहर जाने वाले webhooks को queue में डालकर retry किया जाता है, उस request को रोके बिना जिसने उन्हें शुरू किया।

अंतर्निहित

आपको क्या मिलता है

Blocking reads वाली FIFO

BRPOP के साथ LPUSH, और workers काम आने तक सोते रहते हैं।

LPUSHBRPOP

कोई job नहीं खोती

BLMOVE हर job को atomically processing list को सौंपता है।

BLMOVELREM

Parallel producers और consumers

Producers और consumers को parallel worker threads संभालते हैं।

और चाहिए?

Acknowledgements, consumer groups और replay के लिए streams इस्तेमाल करें।

XADDXREADGROUP
संदर्भ:BLMOVEBRPOPLPUSHLMOVE

आम सवाल

Worker crash होने पर job का क्या होता है?

अगर आप jobs BLMOVE से लेते हैं, तो job processing list में पड़ी रहती है। एक monitor ऐसी किसी भी job को, जो वहाँ बहुत देर से है, वापस queue में डाल सकता है।

क्या workers को poll करना पड़ता है?

नहीं। BRPOP और BLMOVE job आने तक रुकते हैं, वैकल्पिक timeout के साथ।

Lists या streams?

Lists सबसे सरल queue हैं। Streams consumer groups, हर संदेश का acknowledgement और history जोड़ते हैं। Event streaming का use case देखें।

संबंधित उपयोग के मामले

इसे अपने वर्कलोड पर आज़माएं

HotKV Redis प्रोटोकॉल बोलता है, इसलिए आप किसी मौजूदा क्लाइंट को इसकी ओर इंगित करके यही कमांड चला सकते हैं।