2011-03-15 20 views
17

मेरे पास कई WorkerRole हैं जो केवल थोड़े समय के लिए नौकरी करते हैं, और यह प्रत्येक को एक ही उदाहरण में रखने के लिए धन की बर्बादी होगी। हम उन्हें एक ही में विलय कर सकते हैं, लेकिन यह एक गड़बड़ होगी और दूर भविष्य में उन्हें भार बढ़ने पर स्वतंत्र रूप से काम करना चाहिए।प्रति उदाहरण एकाधिक वर्कररोल चलाएं

क्या "बहु भूमिका" WorkerRole बनाने के लिए एक तरीका है जिससे आप "बहु साइट" WebRole बना सकते हैं?

नकारात्मक मामले में, मुझे लगता है कि मैं एक "मास्टर कार्यकर्ता भूमिका" बना सकते हैं, कि, किसी दिए गए फ़ोल्डर से विधानसभाओं लोड RoleEntryPoint प्रतिबिंब के साथ कक्षाएं derivated देखने के उदाहरण बना और .Run() या .OnStart() विधि आह्वान करने के लिए सक्षम है। यह "मास्टर वर्कर रोल" अप्रत्याशित अपवादों को भी पुनर्स्थापित कर देगा, और सभी उप RoleEntryPoint एस में .OnStop() पर कॉल करें जब .OnStop() मास्टर एक में कॉल किया जाता है। क्या यह काम करेगा? मुझे किस बारे में पता होना चाहिए?

+0

रुबेन आप हमेशा अपना कोड/पोस्ट संपादित करते हैं! हाहा – vtortola

उत्तर

8

जैसा कि अन्य लोगों ने उल्लेख किया है, यह आपके उदाहरणों के उपयोग को अधिकतम करने के लिए एक बहुत ही आम तकनीक है।ऐसे उदाहरण और "ढांचे" हो सकते हैं जो कार्यकर्ता आधारभूत संरचना और वास्तविक कार्य जिसे आप करना चाहते हैं, जिसमें इस (हमारे) नमूने में से एक शामिल है: http://msdn.microsoft.com/en-us/library/ff966483.aspx ("कार्यान्वयन के अंदर" नीचे स्क्रॉल करें)

ते सबसे आम तरीके काम को ट्रिगर के होते हैं:

  1. समय अनुसूचित श्रमिकों ("क्रॉन" नौकरियों की तरह)
  2. संदेश baseds श्रमिकों (काम संदेश की उपस्थिति से चालू होने वाले)।

उपरोक्त वर्णित कोड नमूना # 2 के लिए और अधिक अवशोषण लागू करता है और # 1 के लिए आसानी से एक्स्टेंसिबल है।

ध्यान रखें कि कतारों के साथ सभी इंटरैक्शन मतदान पर आधारित हैं। कार्यकर्ता कतार पर एक नए संदेश के साथ जागृत नहीं होगा। आपको नए संदेशों के लिए सक्रिय रूप से कतार से पूछने की आवश्यकता है। अक्सर पूछताछ माइक्रोसॉफ्ट को खुश कर देगा, लेकिन शायद आप नहीं :-)। प्रत्येक क्वेरी बिल के लेनदेन के रूप में गिना जाता है (उनमें से 10K = $ 0.01)। एक अच्छी प्रैक्टिस कुछ प्रकार के देरी वाले बैक-ऑफ वाले संदेशों के लिए कतार को मतदान करना है। इसके अलावा, बैचों में संदेश प्राप्त करें।

अंत में, इसे चरम पर ले जाना, आप एक ही उदाहरण में वेब भूमिकाओं और कार्यकर्ता भूमिकाओं को भी जोड़ सकते हैं। उदाहरण के लिए यहां देखें: http://blog.smarx.com/posts/web-page-image-capture-in-windows-azure

3

एक 'बहु भूमिका' एक गड़बड़ क्यों होगी? आप प्रत्येक कार्यकर्ता भूमिका कार्यान्वयन को के रूप में कम से कम युग्मित घटक और फिर लिख सकते हैं सभी उपयुक्त घटकों से एक कार्यकर्ता भूमिका लिखें।

आप बाद में एक अलग कार्यकर्ता भूमिका के लिए बाहर जिम्मेदारियों में से कुछ अलग करने के लिए की जरूरत है, तो आप एक नए कर्मचारी भूमिका केवल इस घटक साथ, रचना जबकि एक ही समय पर यह पुराने कार्यकर्ता भूमिका से निकालने कर सकते हैं।

यदि आप चाहते थे, तो आप देर से बाइंडिंग पर नियोजित कर सकते हैं ताकि यह बिना किसी संकलन के किया जा सके, लेकिन अक्सर मुझे नहीं लगता कि यह प्रयास के लायक होगा।

+0

विचार कुछ ऐसा विकसित करना है जिसे आसानी से रद्द किया जा सके। उदाहरण के लिए, अलग-अलग भूमिकाएं अलग-अलग बनाएं, और उन्हें एक साथ काम करने के लिए एक मास्टर वर्कर भूमिका का उपयोग करें, लेकिन ... जब लोड स्तर स्वीकार्य हो, तो प्रत्येक को कोड के बिना स्वयं को काम करने के लिए रखें। – vtortola

5

एकाधिक कार्यकर्ता भूमिकाएं एक बहुत ही साफ कार्यान्वयन प्रदान करती हैं। हालांकि, निष्क्रिय भूमिका के उदाहरणों के लिए लागत पदचिह्न एक कार्यकर्ता भूमिका से कहीं अधिक होगा।

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

सीपीयू और मेमोरी सीमाओं के अलावा, बस याद रखें कि एक ही भूमिका में अधिकतम 5 अंतराल हो सकते हैं (यदि आप रिमोट डेस्कटॉप का उपयोग कर रहे हैं तो कम)।

संपादित करें: सितंबर 2011 तक, भूमिका विन्यास अधिक लचीला हो गया है, अब आपके पास 25 इनपुट अंत बिंदु (बाहरी दुनिया से सुलभ) और 25 आंतरिक अंतराल (भूमिकाओं के बीच संचार के लिए उपयोग किया जाता है) पूरे तैनाती में है। एमएसडीएन लेख here

मैंने हाल ही में blogged about overloading a Web Role, जो कुछ हद तक संबंधित है।

4

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

फिर से, मैं यह नहीं कह रहा हूं कि यह एक चीज करने के लिए एक पूर्ण है। एक ऐसी जगह है जहां एक एकल कार्यकर्ता भूमिका के तहत कई घटक समझ में आता है (विशेष रूप से monaterily)। बस यह कहकर कि आपको यह ध्यान में रखना चाहिए कि यह इस तरीके को पहली जगह और कारक में क्यों डिजाइन किया गया है, जैसा कि आप अपनी वास्तुकला की योजना बनाते हैं।

+1

सच है, लेकिन आपके पास गलती सहनशीलता के लिए प्रत्येक कार्य में कई कार्यों के साथ कार्यकर्ता भूमिकाओं के कई उदाहरण हो सकते हैं। विंडोज़ एज़ूर एसएलए केवल तभी लागू होते हैं यदि आपके पास किसी दिए गए भूमिका के कम से कम 2 उदाहरण हैं। पैसा एक महान प्रेरक है :-) –

+0

बिल्कुल, यह यूजीनियो के रूप में बस बताया गया है। विचार वर्कररोल ए, बी और सी को एक मास्टर वर्कररोल में चलाया गया है, और इसके कम से कम दो उदाहरण दिए गए हैं। फिर हमें Azure के लाभ भी मिलते हैं: पी – vtortola

+1

आपको अभी भी मास्टर रोल में शेड्यूलिंग और गलती सहनशीलता प्रदान करना है, उदाहरण के लिए, यदि आंतरिक भूमिका ए में एक बग है जो किसी निश्चित डेटा परिदृश्य से ट्रिगर होता है तो यह ' मास्टर भूमिका निभाने/नीचे ले लो। ऐसे मामले में कई उदाहरण होने से मदद नहीं मिलेगी, संभवतः, दोनों उदाहरण एक ही स्रोत डेटा से काम कर रहे हैं जो सभी मामलों में एक ही बग को ट्रिगर करेगा। –

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