2015-01-27 6 views
5

मैंने रद्दीकरण टोकन का उपयोग करके WEBJOBS_SHUTDOWN_FILE और here का उपयोग करके शानदार शटडाउन here के बारे में पढ़ा है, इसलिए मैं सुंदर शट डाउन के आधार को समझता हूं, हालांकि मुझे यकीन नहीं है कि वे वेबजब्स को कैसे प्रभावित करेंगे जो कतार संदेश को संसाधित करने के बीच में हैं।वेबसाइट पुन: नियोजित होने पर निरंतर Azure WebJob पर चल रही प्रक्रियाओं का क्या होता है?

तो यहाँ परिदृश्य है:

  1. मैं कार्यों कतारों को सुनने के साथ एक WebJob है।
  2. संदेश कतार में जोड़ा गया है और नौकरी प्रसंस्करण शुरू होती है।
  3. प्रसंस्करण करते समय, कोई विकास करने के लिए धक्का देता है, एक पुनर्वितरण को ट्रिगर करता है।

मान लिया जाये कि मैं अपने WebJobs Git पर तैनात करने के लिए धक्का देता है, यह तैनाती भी ट्रिगर किया जाएगा WebJobs अद्यतन करने की, झुका है जो (जहाँ तक मैं समझता हूँ) नौकरियों में बंद कार्यप्रवाह के कुछ प्रकार शुरू होगा। तो मेरे पास कुछ सवाल हैं जो उस से निकल रहे हैं।

  1. क्या एक कतार संदेश संसाधित करने के बीच में नौकरियां नौकरी छोड़ने से पहले संदेश को संसाधित करती हैं? या किसी शटडाउन अधिसूचना को अनिवार्य रूप से माना जाता है कि "यह कुतिया बंद होने वाला है। अगर आपके पास इसे संभालने के लिए कुछ भी नहीं है, तो आप एसओएल हैं।"
  2. यदि हम एसओएल हैं, तो डीबी लेनदेन के बराबर में जो कुछ भी कर रहे हैं उसे लपेटने के लिए शटडाउन को संभालने के लिए हमारा सबसे अच्छा विकल्प है और अपने शटडाउन हैंडलर को इस तरह से कार्यान्वित करें कि सभी परिवर्तन बंद हो जाएंगे?
  3. यदि कोई कतार संदेश संसाधित होने के बीच में है और WebJob बंद हो जाता है, तो क्या वह संदेश अपेक्षित होगा? यदि नहीं, तो क्या इसका मतलब यह है कि मेरे शटडाउन हैंडलर को उस संदेश की आवश्यकता को संभालने की आवश्यकता है?
  4. क्या नौकरी अधिसूचित होने के बाद इसे और अधिक कतार संदेशों को पकड़ने के लिए कतारों को सुनने के कार्यों के लिए संभव है कि इसे बंद करने की आवश्यकता है?

यहां कोई मार्गदर्शन बहुत सराहना की है! साथ ही, अगर किसी के पास जॉब शटडाउन को संभालने के तरीके के बारे में कोई अन्य उपयोगी लिंक है, तो मैंने यह उल्लेख किया होगा कि अगर आप उन्हें साझा कर सकें तो यह बहुत अच्छा होगा।

उत्तर

4

परीक्षण की थोड़ी सी मात्रा के बाद, मुझे लगता है कि मुझे अपने प्रश्नों के उत्तर मिल गए हैं और मुझे उम्मीद है कि कोई और मेरे अनुभव से कुछ अंतर्दृष्टि प्राप्त कर सकता है।

नोट: इन सभी परिदृश्यों का परीक्षण .NET कंसोल ऐप्स और एज़ूर कतारों का उपयोग करके किया गया था, इसलिए मुझे यकीन नहीं है कि ब्लॉब्स या टेबल स्टोरेज, या विभिन्न प्रकार के जॉब फ़ाइल प्रकार, इन विभिन्न परिदृश्यों को कैसे संभालेंगे।

  1. के बाद नौकरी से बाहर निकलने के रूप में चिह्नित किया गया है, शुरू हो रहा कार्यों चल रहे हैं कि समय की कॉन्फ़िगर किया गया राशि (अनुग्रह अवधि) होगा (5 सेकंड डिफ़ॉल्ट रूप से, लेकिन मुझे लगता है कि configurable by using a settings.job file है) वे पहले खत्म करने के लिए बाहर निकल गए हैं अगर वे अनुग्रह अवधि में खत्म नहीं होते हैं, तो फ़ंक्शन छोड़ देता है। मुख्य() (या जिस भी फ़ाइल को आपने मेजबान घोषित किया है। RunAndBlock() में), हालांकि, ग्रेस अवधि में शेष समय तक host.RunAndBlock() के बाद कोई भी कोड चलाना समाप्त हो जाएगा (मुझे यकीन नहीं है कि यह कैसे काम करेगा यदि आप काम करेंगे RunAndBlock के बजाय एक अनंत लूप का उपयोग किया)। जहां तक ​​आपके कार्यों में छोड़ने को संभालने के लिए, आप अनिवार्य रूप से रद्द करने के लिए "सुन सकते हैं" जिसे आप IscancellationRequired के लिए अपने ट्रिगर किए गए फ़ंक्शंस में पास कर सकते हैं और फिर तदनुसार इसे संभाल सकते हैं। इसके अलावा, यदि आप खुद को छोड़कर संभाल नहीं पाते हैं तो आप एसओएल नहीं हैं। हुज़्ज़ाह! बिंदु # 3 देखें।

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

  3. यदि आप नौकरी छोड़ने को स्वयं नहीं रखते हैं तो आप परेशानी में नहीं हैं। कवर के तहत क्या हो रहा है इसकी मेरी समझ लगभग मौजूद नहीं है, हालांकि मुझे परिणामों के बारे में काफी यकीन है। यदि कोई कार्य कतार संदेश संसाधित करने के बीच में होता है और इसे खत्म करने से पहले छोड़ने के लिए मजबूर किया जाता है, तो कोई भय नहीं है! जब नौकरी संदेश को संसाधित करने के लिए पकड़ लेती है, तो यह अनिवार्य रूप से इसे निश्चित समय के लिए कतार पर छुपाएगी। यदि आपका फ़ंक्शन संदेश संसाधित करते समय निकलता है, तो वह संदेश x समय के बाद फिर से "दृश्यमान" दिखाई देगा, और इसे फिर से पकड़ा जाएगा और संभावित रूप से अपडेट किए गए कोड के विरुद्ध भाग लिया जाएगा जो अभी तैनात किया गया था।

  4. तो मेरे पास # 4 के लिए मेरे निष्कर्षों में लगभग 9 0% आत्मविश्वास है। और मैं कहता हूं कि इसका परीक्षण करने के प्रयास में विंडोज़ के बीच त्वरित स्विचिंग शामिल थी, जबकि वास्तव में पूरी तरह से सुनिश्चित नहीं किया गया था कि कुछ टुकड़ों के साथ क्या चल रहा था। लेकिन यहां मुझे जो मिला है, उस मौके पर कि एक कतार में ग्रेस अवधि बी 4 में एक नया संदेश जोड़ा गया है, मुझे लगता है कि दो चीजों में से एक हो सकता है: अगर समारोह नौकरी से पहले उस कतार को मतदान नहीं करता है छोड़ देता है, तो संदेश कतार पर रहेगा और नौकरी फिर से शुरू होने पर इसे पकड़ लिया जाएगा। हालांकि अगर समारोह संदेश को पकड़ लेता है, तो इसे किसी अन्य संदेश के समान माना जाएगा जो बाधित था: यह फिर से कतार पर "दिखाई देगा" और नौकरी के पुनरारंभ पर पुन: प्रयास करेगा।

यह काफी अधिक है। मुझे उम्मीद है कि अन्य लोगों को यह उपयोगी लगेगा। मुझे बताएं कि क्या आप इनमें से कोई भी विस्तार चाहते हैं और मुझे कोशिश करने में खुशी होगी। या अगर मैं इससे भरा हूं और आपके पास बहुत सारे सुधार हैं, तो शायद वे अधिक स्वागत करते हैं!

+0

अच्छा प्रयास। यह मुझसे पूछे गए प्रश्न से संबंधित है: http://stackoverflow.com/questions/28042485/what-happens-to-in-progress-jobs-when-you-deploy-a-webjob –

+0

वास्तव में यह है। यह निश्चित रूप से मेरे निष्कर्षों के अनुरूप है, लेकिन दृश्यों के पीछे क्या हो रहा है इसके बारे में वास्तविक तकनीकी स्पष्टीकरण देखना अच्छा लगता है। मुझे यह देखने में कोई फर्क नहीं पड़ता कि स्पष्ट रूप से कहीं भी दस्तावेज किया गया है, हालांकि, यह निश्चित रूप से है! – EJay

+0

वर्तमान में इस परिदृश्य को संभालने का सबसे अच्छा तरीका है - संदिग्ध मुझे सभी क्यू फ़ंक्शंस को बेवकूफ़ बनाने की आवश्यकता है: http://stackoverflow.com/questions/29164414/azure-webjob-graceful-shutdown-of-a-queue-handling- समारोह –

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