मैं नए माइक्रोसर्विसेज के बीच स्थिरता कैसे सुनिश्चित कर सकता हूं?


10

मेरा संगठन माइक्रोसर्विस के विस्फोट का सामना कर रहा है। वर्तमान में हमारे पास नई परियोजनाओं को बूटस्ट्रैप करने का कोई औपचारिक तरीका नहीं है। मुझे लग रहा है कि एक टीम उनकी तैनाती या निर्माण की प्रक्रिया में बग के साथ मेरे पास आएगी, और मैं इस पर समय बिताऊंगा केवल महसूस करने के लिए कि मैंने पहले ही इसे किसी अन्य परियोजना में हल कर लिया है। उन परियोजनाओं के बीच भी बहुत असंगतता है जिन्हें मैं मानकीकृत देखना चाहता हूं।

परिवर्तन में अक्सर एक एकल फ़ाइल (जैसे सर्वरलेस.आईएमएल या एक मेकफाइल) शामिल होती है, इसलिए साझा पुस्तकालयों जैसे जीआईटी सबमॉड्यूल्स में शामिल एक समाधान व्यवहार्य नहीं लगता है। प्रत्येक परियोजना के पास कॉन्फ़िगरेशन का अपना सेट होगा जिसे बनाए रखने की आवश्यकता होती है, उदाहरण के लिए डॉकरफाइल्स या सर्वरलेस.आईएमएल, इसलिए वीएम के लिए केंद्रीकृत कॉन्फ़िगरेशन प्रबंधन समाधान वास्तव में लागू नहीं होते हैं।

मैं यह कैसे सुनिश्चित कर सकता हूं कि नए माइक्रोसॉफ़्ट संगठन मानकों के अनुरूप हों और मौजूदा प्रोजेक्ट्स से बगफिक्स / सुविधाएँ शामिल करें, जो उन डेवलपर्स के लिए आसान और सहज हो, जो नई परियोजनाएँ शुरू करना चाहते हैं? इन मुद्दों को हल करने के आसपास कुछ सर्वोत्तम अभ्यास क्या हैं?

वर्तमान वर्कफ़्लो हमारे पास है कि आप अपने बगल के व्यक्ति से पूछें "मुझे किस प्रोजेक्ट को एक टेम्पलेट के रूप में उपयोग करने के लिए क्लोन करना चाहिए?" और फिर उस परियोजना के लिए आवश्यक सभी सामान हटा दें।

जवाबों:


5

मैं इस बात का उत्तर दूंगा कि मेरा समाधान अभी तक क्या है, लेकिन मुझे अभी भी यह सुनने में दिलचस्पी है कि अन्य संगठन इस समस्या को कैसे हल कर रहे हैं और उनके पास जो सर्वोत्तम अभ्यास हैं, वे कैसे हैं।

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

प्रत्येक परियोजना के लिए डाउनस्ट्रीम प्रचारित किए जा रहे टेम्प्लेट में किए गए परिवर्तनों की समस्या को हल करने के लिए, मेरा समाधान एक ऐसी प्रक्रिया को लागू करना है, जहां माइक्रोसर्विस के मालिकों को टेम्प्लेट में परिवर्तन के बारे में अवगत कराया जाता है और फिर उन परिवर्तनों का प्रचार करने के लिए ज़िम्मेदार होते हैं।


यह वही है जो हम करते हैं, एक सरल हैलो वर्ल्ड ऐप के संयोजन में जो एक ठोस उदाहरण के रूप में सर्वोत्तम प्रथाओं को दिखाता है।
मोनिका सेलियो

4

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

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

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

इसके अलावा, यदि आप अपने सर्वर रहित विषय / प्रतिमान, कठपुतली , उत्तर देने योग्य और नमकीन के साथ जारी रखना चाहते हैं, तो सभी मास्टरलेस हैं या यदि आप इस विषय को जारी रखना चाहते हैं, तो एक मास्टरलेस मोड का समर्थन करें।


मैंने अपने प्रश्न में कुछ उदाहरण और स्पष्टीकरण जोड़े हैं। कॉन्फ़िगरेशन प्रबंधन वास्तव में मदद नहीं करता है क्योंकि प्रत्येक प्रोजेक्ट अपने कॉन्फ़िगरेशन में स्वयं-निहित है। कोड के रूप में कॉन्फ़िगरेशन के लिए माइग्रेट करने के साथ कोई समस्या नहीं है, यह कॉन्फ़िगरेशन को कोड के रूप में बनाए रखने के बारे में है और यदि आप 100 अलग-अलग कॉन्फ़िगरेशन के साथ प्रत्येक माइक्रोएसडी के साथ थे, तो आप जो कॉन्फ़िगरेशन समाप्त कर सकते हैं। हम वर्तमान में निरंतर बिल्ड के साथ CI / CD का उपयोग करते हैं ताकि चिंता न हो।
user2640621

1
@ user2640621 - क्या आपने कभी कॉन्फ़िगरेशन प्रबंधन प्रणाली का उपयोग किया है? "कॉन्फ़िगरेशन फैलाव" को केंद्रीकृत करने से आपको इसे आसानी से और एक स्थान से (100 अलग-अलग स्थानों के बजाय) प्रबंधित करने में मदद मिलती है। जबकि प्रत्येक परियोजना स्वयं निहित हो सकती है, स्पष्ट रूप से कुछ ओवरलैप हैं जैसा कि आप अस्थायी तैनाती के बारे में पूछ रहे हैं। यह एक बॉक्स में एक युगल को बाहर निकालने की कोशिश करने के लायक हो सकता है कि आप उन्हें लिखने से पहले कैसे काम करते हैं, यह महसूस करने के लिए ... यह सिर्फ आपकी कॉन्फ़िगरेशन फ़ाइलों के प्रबंधन को स्वचालित नहीं करता है - यह इससे कहीं अधिक है।
जेम्स शेवी

1
मैंने SaltStack, Chef और Puppet का उपयोग किया है, लेकिन कभी-कभी VMs के प्रबंधन के लिए। आपके उत्तर के लिए धन्यवाद, मैं निश्चित रूप से देख रहा हूं कि अब VM को प्रबंधित करने के बाहर कॉन्फ़िगरेशन प्रबंधन का उपयोग कैसे किया जा सकता है।
user2640621

2
@ user2640621: यदि वे सभी अलग हैं: "आप इसे कोड करते हैं, आप इसे चलाते हैं"। टीमों को उनकी सेवाओं के ऑप्स का प्रबंधन करने दें। उन्हें अपने दर्द को महसूस करने दें।
मोनिका को पुनः स्थापित करें - एम। श्रोडर

3

यह प्रश्न व्यापक है, इसलिए यदि मेरा उत्तर थोड़ा आधार-आधारित है तो संदर्भ और विशिष्ट उदाहरणों को जोड़ने के लिए स्वतंत्र महसूस करें ताकि मुझे बेहतर समझ हो।

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

आप इस अपरिवर्तनीयता को कॉन्फ़िगरेशन उपकरण जैसे कि Ansible और Packer के साथ जोड़ सकते हैं। कॉन्फ़िगरेशन प्रबंधन का उपयोग करके आप मशीन छवि को उस पर जो भी आप चाहते हैं उसे (एप्लिकेशन सहित) प्रावधान कर सकते हैं। पैकर फिर आपको उस मशीन की छवि का एक स्नैपशॉट लेने की अनुमति देगा और प्रत्येक तैनाती समान होगी।

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

हालाँकि, जो सबसे महत्वपूर्ण सलाह मैं दे सकता हूँ वह है बस एक समाधान के साथ आना, जिसका पूरा संगठन समर्थन और रखरखाव कर सकता है। यह एक एसडीएलसी स्थापित करने की कोशिश कर रहा है जो आपकी समस्याओं के विशेष सेट को हल करता है, नेतृत्व की संस्कृति और दृष्टिकोण से मेल खाता है, और आधुनिक वास्तुकला प्रथाओं को गले लगाता है।

मैं तीन संगठनों के साथ रहा हूं और हमने तीन अलग-अलग दृष्टिकोण अपनाए हैं।

सौभाग्य!


हम किसी भी VM- आधारित समाधान का उपयोग नहीं कर रहे हैं (ज्यादातर सर्वर रहित और डॉकर का एक सा), लेकिन मैं आपके उदाहरण पर अपनी समस्या को लागू करने का प्रयास करूंगा। जब कोई नई पैकर छवि बनाना चाहता है, तो वे कहां से शुरू करेंगे? यदि प्रत्येक परियोजना स्व-निहित है और पैकर कॉन्फ़िगरेशन के लिए कोई केंद्रीय भंडार नहीं है, तो वे चित्र बनाने के लिए अपने आधार के रूप में क्या उपयोग करते हैं? शायद एक अंतर यह है कि जिन परियोजनाओं के साथ मैं काम कर रहा हूं, वे संभव के रूप में स्वयं-निहित होने की कोशिश करते हैं, बिना किसी केंद्रीकृत सेवाओं पर निर्भरता के जैसे कि अन्सिबल जहां आप एक ही बार में सभी परियोजनाओं के लिए अपने कॉन्फ़िगरेशन को अपडेट कर सकते हैं।
user2640621

सर्वरहित और डॉकर आधारित वास्तुकला के साथ आप अभी भी इन बुनियादी बातों को लागू कर सकते हैं। आधार रणनीति फ़ाइल को बनाए रखने के लिए मेरी एक रणनीति है। आप एक सेंट-बेस्ड डॉक फ़ाइल का निर्माण कर सकते हैं, जिसमें प्रत्येक माइक्रोसर्विस पर आपके द्वारा अपेक्षित कॉन्फ़िगरेशन शामिल है, फिर प्रत्येक टीम उस डॉकटर फ़ाइल को खींच सकती है और उसके शीर्ष पर अपनी स्वयं की माइक्रोसॉर्क्स विशिष्ट डॉक फ़ाइल बना सकती है। कंटेनर प्रबंधन और निरंतर तैनाती के साथ मदद करने के लिए आप कुबेरनेट्स जैसे उपकरण का उपयोग कर सकते हैं।
चाड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.