कतार के लिए रेडिस क्यों?
मैं इस धारणा के तहत हूं कि रेडिस एक कतारबद्ध प्रणाली को लागू करने के लिए एक अच्छा उम्मीदवार बना सकता है। इस बिंदु तक हम मतदान के साथ हमारे MySQL डेटाबेस का उपयोग कर रहे हैं, या RabbitMQ। RabbitMQ के साथ हमें कई समस्याएं हैं - क्लाइंट लाइब्रेरी बहुत खराब और छोटी हैं और हम उन्हें ठीक करने में बहुत सारे डेवलपर-घंटों का निवेश नहीं करना चाहते हैं, सर्वर प्रबंधन कंसोल, आदि के साथ कुछ समस्याएं और समय के लिए। कम से कम, हम मिलीसेकंड के लिए या गंभीर रूप से प्रदर्शन को गंभीरता से नहीं पकड़ रहे हैं, इसलिए जब तक एक प्रणाली में एक वास्तुकला है जो एक कतार का समर्थन करता है बुद्धिमानी से हम शायद अच्छे आकार में हैं।
ठीक है, इसलिए वह पृष्ठभूमि है। अनिवार्य रूप से मेरे पास एक बहुत ही क्लासिक, सरल कतार मॉडल है - काम का उत्पादन करने वाले कई उत्पादकों और काम का उपभोग करने वाले कई उपभोक्ता, और उत्पादकों और उपभोक्ताओं दोनों को समझदारी से स्केल करने में सक्षम होने की आवश्यकता है। यह पता चलता है कि एक भोला PUBSUBव्यक्ति काम नहीं करता है, क्योंकि मैं नहीं चाहता कि सभी ग्राहक काम का उपभोग करें, मैं सिर्फ एक ग्राहक को काम प्राप्त करना चाहता हूं । पहली बार में, यह मुझे लगता है जैसे BRPOPLPUSHएक बुद्धिमान डिजाइन है।
क्या हम BRPOPLPUSH का उपयोग कर सकते हैं?
आपके साथ मूल डिज़ाइन BRPOPLPUSHएक कार्य कतार और एक प्रगति कतार है। जब कोई उपभोक्ता काम करता है तो वह वस्तु को प्रगति की कतार में धकेल देता है, और जब वह काम पूरा कर लेता है तो वह उसे पूरा कर LREMलेता है। यह काम के ब्लैकहोलिंग को रोकता है अगर ग्राहक मर जाते हैं और निगरानी को बहुत आसान बना देते हैं - उदाहरण के लिए हम बता सकते हैं कि क्या कोई समस्या है जिसके कारण उपभोक्ताओं को कार्य करने में लंबा समय लगता है, इसके अलावा यह बताने के लिए कि कार्यों की एक बड़ी मात्रा है।
यह सुनिश्चित करता है
- काम ठीक एक उपभोक्ता को दिया जाता है
- कार्य प्रगति की कतार में चल रहा है, इसलिए यदि कोई उपभोक्ता ब्लैकहोल नहीं कर सकता है
कमियां
- यह मेरे लिए अजीब लगता है कि मैंने जो सबसे अच्छा डिज़ाइन पाया है वह वास्तव में उपयोग नहीं करता है
PUBSUBक्योंकि ऐसा लगता है कि रेडिस पर ध्यान केंद्रित करने के बारे में सबसे अधिक ब्लॉग पोस्ट क्या हैं। इसलिए मुझे लगता है कि मुझे कुछ स्पष्ट याद आ रहा है। एक ही तरीकाPUBSUBजिसे मैं दो बार उपभोग किए बिना कार्यों का उपयोग करने के लिए देखता हूं, वह केवल एक अधिसूचना को धक्का देता है जो काम आ गया है, जो उपभोक्ता तब गैर-ब्लॉकिंग-लाइक कर सकते हैंRPOPLPUSH। - एक समय में एक से अधिक कार्य आइटम का अनुरोध करना असंभव है, जो एक प्रदर्शन समस्या प्रतीत होती है। हमारी स्थिति के लिए बहुत बड़ा नहीं है, लेकिन यह स्पष्ट रूप से कहता है कि यह ऑपरेशन उच्च थ्रूपुट या इस स्थिति के लिए डिज़ाइन नहीं किया गया था
- संक्षेप में: क्या मैं बेवकूफ कुछ भी याद कर रहा हूं?
इसके अलावा नोड.जेएस टैग जोड़ना, क्योंकि मैं जिस भाषा के साथ काम कर रहा हूं। नोड एकल-थ्रेडेड और नॉनब्लॉकिंग प्रकृति को देखते हुए लागू करने में कुछ सरलीकरण कर सकता है, लेकिन इसके अलावा मैं नोड-रेडिस लाइब्रेरी का उपयोग कर रहा हूं और समाधान अपनी शक्तियों और कमजोरियों के लिए भी संवेदनशील होना चाहिए।