2012-06-16 14 views
5

मैं node.js के लिए एप्लिकेशन स्थिति को कैसे सहेज सकता हूं जिसमें अधिकांश HTTP अनुरोध शामिल है?Node.js में आवेदन स्थिति सहेजना

मेरे पास नोड.जेएस में एक स्क्रिप्ट है जो ई-कॉमर्स एप्लिकेशन में बड़ी संख्या में उत्पादों (10,000+) उत्पादों को आयात करने के लिए एक विश्वसनीय API के साथ काम करती है। एपीआई की अनुरोधों की मात्रा पर एक सीमा है जिसे हम बनाया जा सकता है और हम उस सीमा के खिलाफ ब्रश करने के लिए देख रहे हैं। पिछली दौड़ पर स्क्रिप्ट Error: connect ETIMEDOUT के साथ संभवतः अधिक एपीआई सीमाओं के कारण निकल गई। मैं 5 बार कनेक्ट करने का प्रयास करने में सक्षम होना चाहता हूं और यदि सीमा को बहाल कर दिया गया है तो एक घंटे के बाद फिर से शुरू हो जाता है।

क्रैश के मामले में प्रगति को बचाने के लिए भी फायदेमंद होगा (बिजली गिर जाती है, नेटवर्क क्रैश आदि)। और उस बिंदु से स्क्रिप्ट को फिर से शुरू करने में सक्षम हो जाएं।

मुझे पता है कि नोड.जेएस एक विशाल घटना-कतार के रूप में कार्य करता है, सभी http अनुरोध और उनके कॉलबैक उस कतार में (कुछ अन्य घटनाओं के साथ) में डाल दिए जाते हैं। यह वर्तमान निष्पादन की स्थिति को बचाने के लिए इसे एक प्रमुख लक्ष्य बनाता है। अन्य सुखद (इस परियोजना के लिए पूरी तरह से जरूरी नहीं) थ्रूपुट बढ़ाने के लिए विभिन्न नेटवर्कों पर कई मशीनों के बीच काम वितरित करने में सक्षम होंगे।

तो क्या ऐसा करने का कोई मौजूदा तरीका है? शायद एक ढांचा? या क्या मुझे इसे स्वयं लागू करने की ज़रूरत है, उस स्थिति में, इस पर किए जाने वाले किसी भी उपयोगी संसाधन की सराहना की जाएगी।

+0

आप जो चाहते हैं वह एक * लगातार नौकरी कतार * है। उनमें से कई हैं; एक बेहतर दिखने वाला एक है [क्यू] (http://learnboost.github.com/kue/) (रेडिस पर निर्माण)। –

+0

मुझे लगता है कि आप बिल्कुल सही हैं। क्यू काफी शानदार है।तो मूल रूप से निर्माता में मैं अपनी डेटा फ़ाइल पढ़ रहा हूं और उपभोक्ता में मैं प्रत्येक उत्पाद को जोड़/अपडेट कर सकता हूं। तो प्रत्येक उत्पाद एक अलग नौकरी होगी। –

उत्तर

3

मुझे यकीन है कि तुम क्या मतलब है जब आप कहते हैं

मुझे पता है कि Node.js एक विशाल घटना कतार के रूप में चल रही है, सभी HTTP अनुरोध और उनके कॉलबैक कुछ के साथ (एक साथ कि कतार में डाल दिया हो नहीं कर रहा हूँ अन्य घटनाओं)। यह वर्तमान निष्पादन की स्थिति को बचाने के लिए इसे एक प्रमुख लक्ष्य बनाता है

अगर आप उत्तर के लिए प्रासंगिक पाते हैं तो कृपया इस पर टिप्पणी करने या विस्तार करने के लिए स्वतंत्र महसूस करें।

जिसके अनुसार, अगर आप बस इस विशेष कार्य के लिए एक हठ तंत्र के लिए देख रहे हैं, मैं Redis की सिफारिश कर सकते हैं, कुछ कारणों से:

  • यह कई डेटा प्रकार पर atomic operations अनुमति देता है; उदाहरण के लिए, यदि आपके पास रेडिस में num_requests_made नामक प्रविष्टि थी, जो अनुरोधों की संख्या का प्रतिनिधित्व करती है, तो आप INCR num_requests_made का उपयोग करके रेडिस में आसानी से इस नंबर को बढ़ा सकते हैं, और यह परमाणु होने की गारंटी है, जिससे कई श्रमिकों को स्केल करना आसान हो जाता है।
  • इसमें several data types है जो आपकी आवश्यकताओं के लिए उपयोगी साबित हो सकता है; उदाहरण के लिए, एक साधारण स्ट्रिंग एक निश्चित अवधि के दौरान किए गए एपीआई अनुरोधों की संख्या का प्रतिनिधित्व कर सकती है (जैसा कि पिछले बुलेट बिंदु में); आप विफल एपीआई अनुरोध पर विवरण संग्रहीत कर सकते हैं जिसे किसी सूची में पुनः सबमिट करने की आवश्यकता है; आदि
  • यह pub/sub mechanisms प्रदान करता है जो आपको प्रोग्राम के कई उदाहरणों के बीच आसानी से संवाद करने की अनुमति देगा।

इस दिलचस्प या उपयोगी लग रहा है और आप पहले से ही Redis से परिचित नहीं हैं, तो मैं अत्यधिक interactive tutorial, जो आप कुछ डेटा प्रकार के परिचय और उनके लिए आदेश बाहर करने की सलाह देते। पढ़ने की सामग्री का एक और अच्छा टुकड़ा A fifteen minute introduction to Redis data types है।

+0

तो रेडिस मोंगो डीबी के अपवाद के साथ बहुत ही समान लगता है कि मोंगो में पब/सब फीचर्स नहीं हैं। विकास की गति के रूप में वितरण इस परियोजना के लिए मेरे लिए एक सौदा बड़ा नहीं है। मैंने पहले से ही नोड.जेएस (मोंगोस) में मोंगो के साथ काम किया है। तो मुझे लगता है कि जब तक आप अन्यथा सोचते हैं, तब तक इसके साथ रहना बेहतर हो सकता है? इसके अलावा मैं नोड.जेएस में भी लूप के बारे में बात कर रहा था जब मैंने कतार का उल्लेख किया और कैसे सबकुछ क्रमशः संसाधित हो जाता है और आंतरिक रूप से एक या अधिक कतारों के रूप में दर्शाया जाता है। –

+0

Redis atomicity और गति पर अधिक ध्यान केंद्रित है, लेकिन हाँ, अगर आप मोंगो पता है कि तुम निश्चित रूप से, यह इस आवेदन के लिए काम करते हैं और कुछ अन्य पब/उप उपकरण का उपयोग करता है, तो आप कभी भी (ZeroMQ, RabbitMQ, आदि) करना चाहता था कर सकता है, हालांकि मुझे क्या करना लगता है कि रेडिस एक बेहतर फिट है जब तक कि आप वास्तविक दस्तावेज़ भंडारण नहीं कर रहे हैं (और क्यू को वैसे भी रेडिस द्वारा समर्थित किया जाता है)। जहां तक ​​घटना कतार है, मुझे लगता है कि मैं देख रहा हूं कि आप क्या चल रहे हैं, लेकिन मुझे यकीन नहीं है कि आप कुछ कस्टम रोल किए बिना राज्य में कैसे पहुंचेंगे और कैसे बचाएंगे। –

+0

हाँ धन्यवाद ब्रैंडन :)। आप दोनों ने वास्तव में दिशा की बेहतर समझ प्राप्त करने में मेरी मदद की। मैं एक फॉलो अप प्रश्न खोलूंगा। यदि आप या @ डैन-डी एक ऐसा उत्तर जोड़ सकते हैं जो वर्णन करता है कि कुछ ऐसा करने के लिए क्यू का उपयोग कैसे किया जाए, तो मैं इसे उत्तर के रूप में चिह्नित करूंगा, धन्यवाद :)। –

संबंधित मुद्दे