में एज़ूर कार्यकर्ता भूमिकाओं को समेकित करना मेरे पास एज़ूर में एक साधारण कार्य भूमिका है जो एसक्यूएल एज़ूर डेटाबेस पर कुछ डेटा प्रोसेसिंग करता है। कर्मचारी मूल रूप से किसी तृतीय पक्ष डेटासॉर से डेटा को हर 2 मिनट में अपने डेटाबेस में जोड़ता है। जब मेरे पास भूमिका के दो उदाहरण होते हैं, तो यह स्पष्ट रूप से अनावश्यक रूप से दोगुना हो जाता है। मैं अनावश्यकता के लिए 2 उदाहरण और 99.9 5 अपटाइम करना चाहता हूं, लेकिन वे दोनों एक ही समय में प्रसंस्करण नहीं करना चाहते हैं क्योंकि वे एक ही नौकरी को डुप्लिकेट करेंगे। क्या इसके लिए एक मानक पैटर्न है कि मुझे याद आ रही है? मुझे पता है कि मैं डेटाबेस में झंडे सेट कर सकता हूं, लेकिन उम्मीद है कि इसे प्रबंधित करने का एक और आसान या बेहतर तरीका है। धन्यवादएकाधिक उदाहरण
उत्तर
जैसा कि मार्क ने सुझाव दिया है, आप एक संदेश पोस्ट करने के लिए एक Azure कतार का उपयोग कर सकते हैं। आपके पास कार्यवाहक भूमिका उदाहरण कतार में एक फॉलोअप संदेश पोस्ट कर सकता है क्योंकि वर्तमान संदेश को संसाधित करते समय यह आखिरी चीज है। इस मुद्दे को एक सेमफोर की आवश्यकता के बारे में बताए गए मुद्दे से निपटना चाहिए। आपके कतार संदेश में, संदेश संसाधित होने पर आप टाइमस्टैम्प अंकन एम्बेड कर सकते हैं। नया संदेश बनाते समय, वर्तमान समय में केवल दो मिनट जोड़ें।
और ... यदि यह स्पष्ट नहीं है: यदि कार्यकर्ता भूमिका उदाहरण प्रसंस्करण पूरा करने से पहले दुर्घटनाग्रस्त हो जाता है और एक नया कतार संदेश दोबारा पोस्ट करने में विफल रहता है, तो यह ठीक है। इस मामले में, वर्तमान कतार संदेश कतार पर फिर से दिखाई देगा और फिर एक और उदाहरण इसे संसाधित करने के लिए स्वतंत्र होगा।
सुनिश्चित करें कि आप एक जहर संदेश फ़िल्टर लागू करते हैं, हालांकि: यदि उस विशेष संदेश के कारण कोई कार्यकर्ता भूमिका क्रैश हो रही है, तो आप इसे कतार में दोबारा पोस्ट नहीं करना चाहते हैं। एक रिपोस्ट गिनती (या पढ़ना गिनती) आपकी मदद कर सकती है। – tijmenvdk
@tijmenvdk - सहमत हुए। –
आप इस सतत मशीन को कैसे शुरू करते हैं? यदि आपके पास एक ही समय में शुरू होने वाली भूमिका के दो उदाहरण हैं जिन्हें किसी को पहला संदेश पोस्ट करना चाहिए? –
ऐसा करने का एक आसान आसान तरीका नहीं है, मुझे नहीं लगता।
मार्क के उल्लेख के रूप में आप सैमफोर का उपयोग कर सकते हैं, मूल रूप से शुरुआत और प्रसंस्करण के बंद होने के रिकॉर्ड को रिकॉर्ड करने के लिए। फिर आपके पास कोई भी उदाहरण चल रहा है, प्रत्येक सेमेफोर रिकॉर्ड का निरीक्षण कर सकता है और अगर सैफोरोर इसे अनुमति देता है तो केवल अभिनय कर सकता है।
हालांकि, यहां चेतावनी यह है कि यदि घटनाओं में से कोई एक प्रसंस्करण के बीच में दुर्घटनाग्रस्त हो जाता है और कभी भी सैमफोर जारी नहीं करता है तो क्या होता है? आप "टाइमआउट" मान को कार्यान्वित कर सकते हैं जिसके बाद अन्य उदाहरण X समय के लिए अनलॉक नहीं होने पर प्रसंस्करण शुरू करने का प्रयास करेंगे।
वैकल्पिक रूप से, आप Azure में अनुत्तरदायी उदाहरण के लिए देख सकते हैं और एक नया उदाहरण शुरू 1. अधीन है तो "तैयार" उदाहरणों की राशि यह आपको नहीं द्वारा कुछ पैसे बचा सकते हैं बचत होगी करने के लिए AzureWatch की तरह एक तीसरी पार्टी निगरानी सेवा का उपयोग कर सकते इसमें 2 उदाहरण होते हैं और हर समय चलते हैं, लेकिन जब कोई उदाहरण विफल रहता है और जब कोई नया प्रारंभ होता है तो थोड़ी देर लगती है।
सुझाए गए एक सेमफोर जाने का रास्ता होगा, हालांकि मैं शायद ब्लॉब स्टोर में एक साधारण टाइमस्टैम्प दिल की धड़कन के साथ जाऊंगा।
दूसरा विचार यह है कि यह कितना आवश्यक है? यदि आपके भार कुछ मिनटों तक नीचे रह सकते हैं, तो शायद भूमिका को रीसायकल करने दें?
डेविड के समाधान पर छोटे पकड़। कतार में संदेश दोबारा पोस्ट करना वर्तमान निष्पादन पर आखिरी चीज के रूप में होगा ताकि अगर मौजूदा संदेश समाप्त हो जाए और कतार पर पुन: सतह के साथ मशीन क्रैश हो जाए। यह मानता है कि संदेश मूल रूप से देखा गया था और कतार से निकालने के लिए एक डी-कतार ऑपरेशन की आवश्यकता है। कतार में नया संदेश डालने से पहले डी-कतार होना चाहिए। यदि इन 2 परिचालनों के बीच भूमिका दुर्घटनाग्रस्त हो जाती है, तो सिस्टम में कोई टोकन नहीं छोड़ेगा और रुकावट आएगी। ईएसबी डुप्लिक चेक एक व्यवहार्य दृष्टिकोण की तरह लगता है, लेकिन ऐसा लगता है कि यह निर्धारित नहीं होगा क्योंकि बस केवल कतार में मौजूद समान संदेशों की जांच कर सकती है। लेकिन यदि पिछले एक के बाद संदेश में से एक सही तरीके से आता है, तो समानांतर में चल रही 2 प्रक्रियाओं को समाप्त करने का एक मौका होता है।
एक वैकल्पिक समाधान, यदि आप इसे बर्दाश्त कर सकते हैं, तो कभी भी डी-क्यूई नहीं करना चाहिए और केवल पेक ऑपरेशंस के माध्यम से संदेश पट्टा करना होगा। आपको यह सुनिश्चित करना होगा कि अदृश्यता समय समाप्ति आपके कार्यकर्ता की भूमिका में प्रसंस्करण समय से परे कभी नहीं हो। जहां तक पहली जगह टोकन बनाते हैं, वही कार्यकर्ता भूमिका स्टार्टअप रणनीति एएसबी डुप्लिकेट चेक के साथ संयुक्त होने से पहले वर्णित की जानी चाहिए (चूंकि संदेश कतार से कभी नहीं चलेगा)।
ठीक है, आप एक Azure कतार पर एक ट्रिगर संदेश डाल सकते हैं, क्योंकि केवल एक ही ग्राहक एक समय में एक संदेश पढ़ सकता है। हालांकि, यह सिर्फ उन संदेशों को बनाने के सवाल को उठाता है। यदि आप नियत अंतराल पर वर्कर भूमिकाओं से ऐसा करते हैं, तो आपको एक ही समस्या होती है क्योंकि प्रत्येक समवर्ती कार्यकर्ता भूमिका लगभग उसी समय एक ही संदेश भेजने जा रही है। मैं इस समाधान के बारे में नहीं सोच सकता कि इसमें किसी प्रकार का सेमफोर शामिल नहीं है। –