इस वर्ष की शुरुआत में हमने एक समर्पित सर्वर होस्टिंग सुविधा से AWS में माइग्रेट किया, और हमें बहुत खुशी है कि हमने ऐसा किया। हम ऑटोमेशन का एक गुच्छा पाकर खुश हैं, क्योंकि हमें सर्वर के साथ कम समय बिताने का मौका मिलता है। :) यह पोस्ट बताती है कि हमारे बुनियादी ढांचे में क्या होता है जब हमारे पास प्रसंस्करण में होने वाली त्रुटि सूचनाओं की मात्रा में परिवर्तन होता है।
हम कैसे स्केल करते हैं
हमारी प्रसंस्करण पाइपलाइन साइडकीक पर बहुत अधिक निर्भर करती है, जो हमारे लिए रॉक-सॉलिड रही है। पाइपलाइन में अधिकांश काम ऐसे उदाहरणों द्वारा नियंत्रित किया जाता है जो एक ऑटोस्केलिंग समूह से संबंधित होते हैं। जब Sidekiqbacklog बढ़ता है, तो CloudWatch अलार्म चालू हो जाता है, जिससे इस समूह में नए उदाहरण प्रारंभ हो जाते हैं। जैसे ही ट्रैफ़िक कम होता है और बैकलॉग गायब हो जाता है, उदाहरण समाप्त हो जाते हैं।
शैली के साथ हम कैसे स्केल करते हैं
इस सेटअप में एकमात्र रोड़ा यह है कि हम यह सुनिश्चित करना चाहते हैं कि साइडकीकवर्कर्स अपने सभी काम को एक इंस्टेंस से पहले समाप्त कर लें। हालांकि साइडकीक पुनर्निर्धारण कार्यों का समर्थन करता है जो पूरा होने से पहले समाप्त हो जाते हैं, हम इससे बचना पसंद करते हैं जब हम कर सकते हैं- किसी कार्य को पूरा करने के लिए कुछ अतिरिक्त सेकंड लेना बेहतर है कि इसे पुनर्निर्धारित और पुनः आरंभ किया जाए। सौभाग्य से, अपनी विलक्षणता में, साइडकीक के पास वर्तमान कार्य पूरा होने के बाद कार्यकर्ता प्रक्रियाओं को नए कार्य को स्वीकार करना बंद करने के लिए कहने का एक तरीका है, जिससे श्रमिकों को समाप्त करने की तैयारी में आसानी होती है। चाल उन श्रमिकों को बता रही है कि उन्हें जल निकासी शुरू करने की आवश्यकता है - और इसके लिए, हम लाइफसाइकिल हुक, क्लाउडवॉच इवेंट्स + लैम्ब्डा, ईसी 2 सरल सिस्टम मैनेजर, और कोड का एक छोटा सा संयोजन का उपयोग करते हैं।
इस पोस्ट के बाकी हिस्सों में आपको दिखाया जाएगा कि आप हमारे सेटअप को कैसे कॉपी कर सकते हैं, जो उस शुभ रात्रि में धीरे-धीरे जाते हैं।
आवश्यकताएँ
स्वाभाविक रूप से, आपको एक ऑटोस्केलिंग समूह की आवश्यकता होगी जिसमें स्केलिंग नीति हो जो आपके द्वारा परिभाषित कुछ नियमों के आधार पर उदाहरणों को समाप्त कर दे। इसके अलावा, आपको एसएसएम एजेंट को चलाने के लिए अपने इंस्टेंस को कॉन्फ़िगर करने और एसएसएम एक्सेस वाली भूमिका में चलने की आवश्यकता होगी। इन इंस्टेंस को ऑटोस्केलिंग एपीआई के साथ बातचीत करने के लिए अनुमतियों की भी आवश्यकता होगी। उदाहरण भूमिका के लिए नीति दस्तावेज़ यहां दिया गया है:
कोड
एक बार जब वे आइटम हो जाते हैं, तो आप टुकड़ों को एक साथ जोड़ना शुरू कर सकते हैं। हम प्रक्रिया के अंत में शुरू करेंगे - हमारी स्क्रिप्ट जो इंस्टेंस पर रहेंगे और साइडकीक ड्रेनिंग को संभालेंगे - और हम पीछे की ओर काम करेंगे। सबसे पहले, रूबी कोड जो श्रमिकों को शांत करेगा और काम खत्म होने की प्रतीक्षा करेगा:
हमें साइडकीक प्रक्रियाओं की एक सूची मिलती है जो साइडकीक एपीआई के माध्यम से वर्तमान उदाहरण पर चल रही हैं, उन्हें नया काम स्वीकार करना बंद करने के लिए कहें, तब तक प्रतीक्षा करें जब तक कि सभी प्रक्रियाओं में कोई सक्रिय कार्य न हो।
यहाँ शेल स्क्रिप्ट है जो उस स्क्रिप्ट को ट्रिगर करेगी जब यह इंस्टेंस को समाप्त करने का समय होगा:
करने के लिए बहुत सारे सेटअप हैं, लेकिन इस स्क्रिप्ट का मांस लाइन 8 से शुरू होता है। पहले हम ऑटो स्केलिंग समूह को संकेत देते हैं कि हम जीवनचक्र हुक पर काम कर रहे हैं। इसका गार्ड होने का दुष्परिणाम है - यदि इस उदाहरण को ऑटोस्केलिंगग्रुप द्वारा समाप्ति के लिए निर्धारित नहीं किया गया है, तो यह आदेश विफल हो जाएगा, और कार्यकर्ता शटडाउन स्क्रिप्ट को लागू नहीं किया जाएगा। इस स्क्रिप्ट को तब तक नहीं बुलाया जाना चाहिए जब तक कि उदाहरण को समाप्त करने के लिए निर्धारित नहीं किया गया हो, लेकिन यह थोड़ा रक्षात्मक होने के लिए चोट नहीं करता है। :) मान लें कि हम आगे बढ़ रहे हैं, हम श्रमिकों को बंद कर देते हैं, और फिर हम ऑटोस्केलिंग समूह को समाप्ति के साथ आगे बढ़ने के लिए कहते हैं। यदि हम वह एपीआई कॉल नहीं करते हैं, तो हुक के समय समाप्त होने तक इंस्टेंस चालू रहेगा। (हम उस पर थोड़ी देर में पहुंचेंगे)।
SSM दस्तावेज़
अब हमें कुछ ऐसा चाहिए जो इस शेल स्क्रिप्ट को ट्रिगर करे। यहीं पर SSM एजेंट आता है। यह पृष्ठभूमि में खुशी से चल रहा है, यह बताने के लिए कि क्या करना है, SendCommand के माध्यम से एक दस्तावेज़ दिखाने की प्रतीक्षा कर रहा है। OurDocument एजेंट को टर्मिनेशन स्क्रिप्ट चलाने का निर्देश देता है:
आप दस्तावेज़ . पर क्लिक करके अपना दस्तावेज़ बना सकते हैं EC2 कंसोल के सिस्टम मैनेजर साझा संसाधन अनुभाग में लिंक (साइडबार के नीचे के पास), दस्तावेज़ बनाएं क्लिक करें बटन, और उस JSON को सामग्री बॉक्स में छोड़ना।
लैम्ब्डा फ़ंक्शन
अपने दस्तावेज़ के साथ, एक लैम्ब्डा फ़ंक्शन बनाएं जो इसे लक्ष्य उदाहरण पर चलाएगा जब यह एक उदाहरण को समाप्त करने का समय होगा। उसके लिए यहां कुछ कोड दिया गया है:
आपको PrepInstanceForTermination
replace को बदलना होगा आपने अपने दस्तावेज़ के लिए जो भी नाम चुना है, लेकिन अन्यथा यह कोड सिर्फ कॉपी-पेस्ट है।
इस लैम्ब्डा फ़ंक्शन को कुछ अनुमतियों की आवश्यकता है (सामान्य लैम्ब्डा अनुमतियों के अतिरिक्त), और उसके लिए यहां एक आईएएम नीति दस्तावेज़ है:
दोबारा, आपको दस्तावेज़ का नाम बदलने की आवश्यकता हो सकती है।
द हुक एंड द इवेंट रूल
वहाँ रुको - हम लगभग वहाँ हैं! आपके पास दो काम बाकी हैं:क्लाउडवॉच इवेंट और लाइफसाइकिल हुक बनाएं। सबसे पहले, घटना:
CloudWatch प्रबंधन कंसोल में, ईवेंट . क्लिक करें साइडबार में, और फिर नियम बनाएं . क्लिक करें बटन। यह वही है जो आपके द्वारा अभी बनाए गए लैम्ब्डाफंक्शन को ट्रिगर करेगा।
बाईं ओर आप वह ईवेंट चुनते हैं जिसे आप देखना चाहते हैं और उस ईवेंट के बारे में कोई अतिरिक्त विशेषताएँ (जैसे सीमित करना कि कौन से ऑटोस्केलिंग समूह इस ईवेंट को ट्रिगर करेंगे), और दाईं ओर आप नियम का लक्ष्य चुनते हैं - हमारे मामले में, लैम्ब्डा फ़ंक्शन जिसे हमने पहले बनाया था। आपको लैम्ब्डा फ़ंक्शन लक्ष्य के लिए किसी भी डिफ़ॉल्ट को बदलने की आवश्यकता नहीं है।
एक बार यह हो जाने के बाद, EC2 प्रबंधन कंसोल पर वापस जाएं और ऑटो स्केलिंग समूह पर नेविगेट करें, जिसमें ऐसे इंस्टेंस हैं जिन्हें आप प्रबंधित करना चाहते हैं। जीवनचक्र हुक पर क्लिक करने के बाद टैब, आप एक हुक बनाने में सक्षम होंगे। हमारा ऐसा दिखता है:
टर्मिनेट वह संक्रमण है जिसमें हम रुचि रखते हैं, और हम चाहते हैं कि समाप्ति आगे बढ़े (डिफ़ॉल्ट परिणाम:जारी रखें) यदि किसी कारण से एपीआई कॉल हमारी शेल स्क्रिप्ट में 600 सेकंड (हार्टबीट टाइमआउट) बीत जाने के बाद नहीं होती है। इसके परिणामस्वरूप हमारे उदाहरण किसी न किसी तरह से समाप्त हो जाएंगे, भले ही साइडकीक कार्यकर्ता 10 मिनट के बाद समाप्त न किए गए हों।
वह एक लपेट है
तुमने कर दिखाया! अब आपके पास एक ऑटोस्केलिंग समूह है जो अपने साइडकीक उदाहरणों को मानवीय तरीके से समाप्त कर सकता है। आनंद लें!
पुनश्च:इनमें से कुछ टुकड़ों को एक साथ रखने पर एक सुपर-सहायक ट्यूटोरियल के लिए श्रेय awslabs को जाता है।