Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

Node.js, WebSockets और Redis के साथ Resque उपयोग की कल्पना कैसे करें

कभी कल्पना करना चाहते हैं कि आपकी रेस्क्यू कतारें, कर्मचारी और नौकरियां कैसे कर रही हैं? इस लेख में, हम सीखेंगे कि रेस्क्यू घटकों के आसपास कुछ सरल ग्राफ़ कैसे बनाएं।

कार्यों को पृष्ठभूमि कतार में सौंपना

एक पृष्ठभूमि कार्यकर्ता कतार में लंबे समय से चलने वाली, कम्प्यूटेशनल रूप से महंगी और उच्च-विलंबता नौकरियों का प्रतिनिधिमंडल स्केलेबल वेब एप्लिकेशन बनाने के लिए उपयोग किया जाने वाला एक सामान्य पैटर्न है। लक्ष्य यह सुनिश्चित करते हुए कि सभी महंगे कार्य अनुरोध/प्रतिक्रिया चक्र के बाहर संभाले जाते हैं, अंतिम-उपयोगकर्ता अनुरोधों को सबसे तेज़ संभव प्रतिक्रिया के साथ पूरा करना है।

अनुरोध

Resque एक रेडिस-समर्थित रूबी लाइब्रेरी है जो बैकग्राउंड जॉब बनाने, उन्हें कई कतारों में रखने और बाद में उन्हें प्रोसेस करने के लिए है। यह उन परिदृश्यों में उपयोग के लिए डिज़ाइन किया गया है, जिनमें नौकरी प्रविष्टियों की एक उच्च मात्रा की आवश्यकता होती है क्योंकि रेस्क्यू एक वेब डैशबोर्ड के माध्यम से आंकड़ों को रिले करते समय व्यवहार की दृश्यता और विश्वसनीयता सुनिश्चित करने के लिए तंत्र प्रदान करता है।

रेडिस

रेडिस एक ओपन सोर्स (बीएसडी लाइसेंस प्राप्त), इन-मेमोरी डेटा स्ट्रक्चर स्टोर है, जिसका उपयोग डेटाबेस, कैश और मैसेज ब्रोकर के रूप में किया जाता है। यह डेटा संरचनाओं जैसे स्ट्रिंग्स, हैश, सूचियों, सेट, श्रेणी प्रश्नों के साथ सॉर्ट किए गए सेट, बिटमैप्स, हाइपरलॉग्स और त्रिज्या प्रश्नों के साथ भू-स्थानिक अनुक्रमणिका का समर्थन करता है।

नोड.जेएस

Node.js आसानी से तेज़ और स्केलेबल नेटवर्क एप्लिकेशन बनाने के लिए क्रोम के जावास्क्रिप्ट रनटाइम पर बनाया गया एक प्लेटफॉर्म है। Node.js एक इवेंट-संचालित, गैर-अवरुद्ध I/O मॉडल का उपयोग करता है जो इसे हल्का और कुशल बनाता है, और इस प्रकार वितरित उपकरणों पर चलने वाले डेटा-गहन रीयल-टाइम अनुप्रयोगों के लिए एकदम सही है।

Express.js

Express.js एक Node.js ढांचा है। Node.js एक ऐसा प्लेटफ़ॉर्म है जो वेब और नेटवर्क एप्लिकेशन बनाने के लिए जावास्क्रिप्ट को वेब ब्राउज़र के बाहर उपयोग करने की अनुमति देता है। इसका मतलब है कि आप अधिकांश अन्य वेब भाषाओं की तरह किसी एप्लिकेशन के लिए सर्वर और सर्वर-साइड कोड बना सकते हैं, लेकिन जावास्क्रिप्ट का उपयोग कर सकते हैं।

सॉकेट.आईओ

Socket.IO रीयल-टाइम वेब एप्लिकेशन के लिए एक JavaScript लाइब्रेरी है। यह वेब क्लाइंट और सर्वर के बीच रीयल-टाइम, द्वि-दिशात्मक संचार को सक्षम बनाता है। इसके दो भाग हैं:एक क्लाइंट-साइड लाइब्रेरी जो ब्राउज़र पर चलती है, और एक सर्वर-साइड लाइब्रेरी Node.js के लिए। दोनों घटकों में लगभग समान एपीआई हैं।

हेरोकू

Heroku एक क्लाउड प्लेटफ़ॉर्म है जो कंपनियों को ऐप्स बनाने, वितरित करने, मॉनिटर करने और स्केल करने देता है — यह उन सभी बुनियादी ढांचे के सिरदर्द को दरकिनार करते हुए एक विचार से दूसरे URL तक जाने का सबसे तेज़ तरीका है।

यह आलेख मानता है कि आपकी मशीन पर पहले से ही Redis, Node.js और Heroku Toolbelt स्थापित हैं।

सेटअप:

  1. स्केलग्रिड के भंडार से कोड डाउनलोड करें।
  2. आवश्यक घटकों को स्थापित करने के लिए npm install चलाएँ।
  3. आखिरकार, आप "नोड इंडेक्स.जेएस" करके नोड सर्वर शुरू कर सकते हैं। आप "नोडमोन" भी चला सकते हैं जो फ़ाइल परिवर्तनों को भी देखता है।

आप इस ऐप के होस्ट किए गए संस्करण को यहां भी एक्सेस कर सकते हैं।

हमारा एप्लिकेशन रेस्क्यू के एक पोर्ट का उपयोग करता है जिसे नोड-रेस्क्यू कहा जाता है जो हमें रेडिस क्लस्टर पर चलने वाली कतारों, श्रमिकों और नौकरियों को देखने की अनुमति देता है।

मूल बातें समझना

जैसे ही आप ऐप शुरू करते हैं, आपको अपना रेडिस क्लस्टर क्रेडेंशियल दर्ज करना होगा। कृपया ध्यान दें कि इसे ठीक से काम करने के लिए आपके क्लस्टर पर Resque स्थापित और चालू होना चाहिए।

सौभाग्य से, Redis™* के लिए पूरी तरह से प्रबंधित स्केलग्रिड, Redis™ के लिए उच्च प्रदर्शन, एक-क्लिक होस्टिंग समाधान प्रदान करता है। यदि आप पहले से सदस्य नहीं हैं, तो आरंभ करने के लिए आप यहां 30-दिवसीय नि:शुल्क परीक्षण के लिए साइन अप कर सकते हैं।

अन्यथा, अपने डैशबोर्ड में लॉग इन करें और Redis™ अनुभाग के अंतर्गत एक नया Redis™ क्लस्टर बनाएं। एक बार आपका क्लस्टर तैयार हो जाने के बाद, आप क्लस्टर विवरण पृष्ठ से आवश्यक विवरण प्राप्त कर सकते हैं। आपको निम्नलिखित जानकारी की आवश्यकता होगी:

  1. होस्ट
  2. पोर्ट
  3. पासवर्ड

यदि कनेक्शन सफल होता है, तो आपको निम्न की तरह ग्राफ़ देखना चाहिए:

आइए इनमें से प्रत्येक ग्राफ पर विस्तार से चर्चा करें। कृपया ध्यान दें कि सभी ग्राफ़ स्वयं-अपडेट कर रहे हैं, इसलिए यदि कर्मचारी आपके क्लस्टर पर कार्य संसाधित कर रहे हैं, तो ग्राफ़ अपने आप अपडेट हो जाएंगे।

सभी कतारों में कुल कार्य

उपरोक्त ग्राफ़ आपके क्लस्टर पर रेस्क्यू क्यू की कुल संख्या और प्रत्येक क्यू में निहित नौकरियों की संख्या दिखाते हैं। Resque "resque:queue:name" नामक एक Redis सूची में एक नौकरी कतार संग्रहीत करता है, और सूची में प्रत्येक तत्व एक JSON स्ट्रिंग के रूप में क्रमबद्ध हैश है। रेडिस की अपनी प्रबंधन संरचनाएं भी हैं, जिसमें "विफल" नौकरी सूची भी शामिल है। Resque अपने डेटा को Redis में "resque:" उपसर्ग के साथ नाम स्थान देता है, इसलिए इसे अन्य उपयोगकर्ताओं के साथ साझा किया जा सकता है।

कार्यकर्ता/नौकरी हिस्टोग्राम

एक रेस्क्यू कर्मी नौकरियों को संसाधित करता है। फोर्क(2) का समर्थन करने वाले प्लेटफॉर्म पर, कार्यकर्ता प्रत्येक कार्य को संसाधित करने के लिए एक बच्चे को फोर्क कर देगा। यह अगली नौकरी शुरू करते समय एक साफ स्लेट सुनिश्चित करता है और क्रमिक स्मृति वृद्धि के साथ-साथ निम्न-स्तरीय विफलताओं को कम करता है।

यह यह भी सुनिश्चित करता है कि कार्यकर्ता हमेशा आपसे, उनके स्वामी के संकेतों को सुन रहे हैं, और तदनुसार प्रतिक्रिया कर सकते हैं।

उपरोक्त ग्राफ रेडिस क्लस्टर पर सभी श्रमिकों को दिखाता है। 1 की स्थिति इंगित करती है कि कार्य कार्यकर्ता को सौंपा गया है और प्रगति पर है, और 0 की स्थिति इंगित करती है कि कार्यकर्ता खाली/निष्क्रिय है।

नौकरी की स्थिति

एक बचाव कार्य कार्य की एक इकाई का प्रतिनिधित्व करता है। प्रत्येक कार्य एक ही कतार में रहता है और इसमें एक संबद्ध पेलोड ऑब्जेक्ट होता है। पेलोड दो विशेषताओं वाला एक हैश है:`वर्ग` और `आर्ग्स`। `वर्ग` रूबी वर्ग का नाम है जिसका उपयोग नौकरी चलाने के लिए किया जाना चाहिए। `Args` तर्कों की एक सरणी है जिसे रूबी वर्ग के `प्रदर्शन` वर्ग-स्तरीय पद्धति में पारित किया जाना चाहिए।

ऊपर दिया गया ग्राफ़ नौकरियों की स्थिति को संसाधित या विफल के रूप में दिखाता है। यदि कार्यकर्ता इसे निष्पादित करने में विफल रहा है, तो विफल स्थिति में एक कार्य जोड़ा जाता है। यहां एक साधारण जॉब ऑब्जेक्ट का उदाहरण दिया गया है।

var jobs = {
  "add": {
    plugins: [ 'jobLock', 'retry' ],
    pluginOptions: {
      jobLock: {},
      retry: {
        retryLimit: 3,
        retryDelay: (1000 * 5),
      }
    },
    perform: function(a,b,callback){
      var answer = a + b;
      callback(null, answer);
    },
  },
  "subtract": {
    perform: function(a,b,callback){
      var answer = a - b;
      callback(null, answer);
    },
  },
};

  • होस्टेड संस्करण यहां उपलब्ध है।
  • इस एप्लिकेशन को Heroku पर परिनियोजित करने के लिए, उनके दस्तावेज़ देखें।
  • आपके लिए यहां फोर्क करने और काम करने के लिए संपूर्ण स्रोत कोड GitHub पर भी उपलब्ध है।

हमेशा की तरह, अगर आप कुछ शानदार बनाते हैं, तो हमें इसके बारे में @scalegridio पर ट्वीट करें।


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं किसी भी एमक्यू प्लेटफॉर्म में इस एकल समवर्ती वितरित कतार को कैसे कार्यान्वित कर सकता हूं?

  2. क्या रेडिस केवल स्ट्रिंग प्रतिनिधित्व की अनुमति देता है लेकिन संख्यात्मक मान नहीं

  3. मैं स्प्रिंग बूट एप्लिकेशन में स्प्रिंग सुरक्षा और रेडिस के साथ वर्तमान में प्रमाणित उपयोगकर्ता प्रिंसिपल कैसे प्राप्त कर सकता हूं?

  4. Redis-Cli . का उपयोग करके विलंबता को समझना

  5. एरोस्पाइक अन्य की-वैल्यू नोस्कल डेटाबेस से कैसे भिन्न है?