2011-04-30 12 views
8

मैं वर्तमान में एक वेब एप्लिकेशन डिज़ाइन कर रहा हूं जो उपयोगकर्ताओं को उन कार्यों को शेड्यूल करने की अनुमति देगा जो HTTP API (उनकी तरफ से) के खिलाफ निष्पादित किए जाएंगे। कार्य आवर्ती हो सकते हैं और न्यूनतम समय संकल्प जिसे शेड्यूलिंग के लिए उपयोग किया जा सकता है, एक मिनट होगा। कार्यों की प्रकृति के कारण मुझे लगता है कि उन्हें अतुल्यकालिक रूप से निष्पादित करना समझ में आता है। हालांकि, इस भाग की वास्तुकला कैसा दिखना चाहिए?वेब अनुप्रयोग वास्तुकला - नौकरी/कार्य कतार की आवश्यकता है?

मैंने वेब एप्लिकेशन द्वारा कार्यों को बनाने के लिए कार्य कतार का उपयोग करने के बारे में सोचा और उन्हें एक कार्यकर्ता द्वारा निष्पादित करने दिया। इस मामले में, मेरे पास कई प्रश्न हैं:

  • आवर्ती कार्यों को मैं कैसे प्रबंधित करूं?
  • मैं आसानी से कार्यों के परिणामों को कैसे सहेज सकता हूं?
  • क्या कतार "लगातार" बनाना आसान है?
  • क्या श्रमिक सीधे डेटाबेस से बातचीत कर सकते हैं?
  • क्या मुझे आवर्ती कार्यों को मैन्युअल रूप से कतारबद्ध करना चाहिए?

मैं और क्या सोच सकता हूं? चूंकि मुझे लगता है कि मैं इस तरह के वेब एप्लिकेशन आर्किटेक्चर के बारे में सोचने वाला अकेला नहीं हूं, क्या कोई "सर्वोत्तम प्रथाएं" हैं? क्या एक कार्य कतार जाने का रास्ता है?

+0

यह [प्रासंगिक] है (http://stackoverflow.com/questions/5636051/cronjobs-in-node-js/5636298#5636298)। यह दिखाता है कि 'node.js' में भविष्य के कार्यों को कैसे कार्यान्वित किया जाए। एक HTTP अनुरोध भेजने के साथ बस नौकरियों की दौड़ में बदलाव करें। – Raynos

उत्तर

9

हां यह वेब अनुप्रयोग के पीछे के अंत में दीर्घकालिक कार्यों को संभालने के लिए एक प्रसिद्ध पैटर्न है। आपके लैंगेज और एप्लिकेशन ढांचे के आधार पर वहां कई कतार कार्यान्वयन हैं - उदा। Resque या Beanstalkd या ActiveMQ या यदि आपकी प्रदर्शन आवश्यकताओं उच्च नहीं हैं तो आप एक डेटाबेस तालिका का उपयोग कतार के रूप में कर सकते हैं।

मूल विचार यह है कि आपका वेब एप्लिकेशन आगे बढ़ने के लिए नौकरी को सक्षम करने के लिए पर्याप्त सामग्री के साथ कतार पर नौकरियां रखता है। पृष्ठभूमि में कार्यकर्ता प्रक्रियाओं का एक समूह (आदर्श रूप से आपके वेब एप्लिकेशन से स्वतंत्र चल रहा है) कतार से नौकरियों को पढ़ता है और उन्हें निष्पादित करता है। परिणाम एक उत्तर कतार पर लिखा जा सकता है या शायद डेटाबेस में लिखा जा सकता है। यह इस बात पर निर्भर करता है कि आप परिणाम को उपयोगकर्ता को वापस कैसे प्रदर्शित करना चाहते हैं। वेब अनुप्रयोग के लिए, डेटाबेस में परिणाम लिखने से शायद अधिक समझदारी मिलती है।

आपकी कतार हैंडलर के आधार पर, वे नौकरियां लगातार बना सकते हैं। जैसे ActiveMQ लगातार संदेश का समर्थन करता है ताकि विफलता की स्थिति में कतार पर संदेश पुनर्प्राप्त किए जा सकें।

आप आवर्ती नौकरियों के बारे में पूछते हैं - और मुझे लगता है कि उत्तर दोबारा मिलने की आवश्यकता पर निर्भर करता है।

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

मैंने हाल ही में एक समान पैटर्न here का वर्णन किया है।

+0

आपको बहुत बहुत धन्यवाद। – Simon

+0

मान लीजिए कि मैं RabbitMq का उपयोग कर रहा हूं, क्या मुझे कतार का प्रबंधन करने के लिए चल रही एक सेवा की आवश्यकता है? यह काम आमतौर पर कैसे किया जाता है? सेवा के लिए एक अच्छा विकल्प क्या है? – SynBiotik

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