अपने आप से एक प्रणाली विकसित करते समय, क्या मुझे माइक्रोसिस्टम का उपयोग करना चाहिए?


30

मैं काम पर एक नई परियोजना शुरू कर रहा हूं, और संभवतः परियोजना पर लगभग एकमात्र डेवलपर होगा, हालांकि एक या दो अन्य डेवलपर्स को मौजूदा अनुप्रयोगों या मुख्य स्क्रिप्ट को मुख्य परियोजना में एकीकृत करने की आवश्यकता होगी। परियोजना को छोटे पैमाने पर बल्क और स्ट्रीमिंग डेटा निगलना / प्रसंस्करण और इवेंट-संचालित और ऑन-डिमांड कोड निष्पादन दोनों को संभालने की आवश्यकता है। फ्रेमवर्क के कुछ हिस्से भारी सीपीयू बाउंड होंगे, और कुछ हिस्से भारी I / O बाउंड हो सकते हैं; अधिकांश डेटा को एक मशीन पर रहना चाहिए, लेकिन हम एक क्लस्टर बनाने और उपलब्ध गणना शक्ति बढ़ाने के लिए VM को कनेक्ट करने में सक्षम हैं। संभवतः एक या एक से अधिक छोटे वेब अनुप्रयोग होंगे जो इस मुख्य ढांचे को प्रदान की गई सेवाओं पर निर्भर करते हैं। मुख्य भाषा सब कुछ के बारे में सिर्फ पायथन होगी।

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

एक से अधिक डेवलपर वाली परियोजना के लिए, क्या माइक्रोसेवर्स अभी भी इस तरह की जटिल प्रणाली को विकसित करने और बनाए रखने को सरल बनाते हैं? क्या इस तरीके / प्रणाली / चौखटे हैं जिनके बारे में मुझे इसके बजाय उपयोग करने पर विचार करना चाहिए, या इस तरह से सिस्टम को डिजाइन करने में शामिल ओवरहेड को कम करना चाहिए?


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

जवाबों:


49

माइक्रोसर्विसेज आमतौर पर अवांछनीय होते हैं क्योंकि वे आपके सॉफ़्टवेयर को एक वितरित प्रणाली में बदल देते हैं - और वितरित सिस्टम सब कुछ बहुत अधिक कठिन बनाते हैं। लेकिन एक सेवा-उन्मुख वास्तुकला के कुछ महत्वपूर्ण लाभ हैं:

  • विभिन्न सेवाओं को अलग-अलग टीमों द्वारा स्वतंत्र रूप से विकसित और तैनात किया जा सकता है
  • विभिन्न सेवाओं को स्वतंत्र रूप से बढ़ाया जा सकता है

जैसा कि आप एकमात्र डेवलपर होंगे, आपको सेवाओं को स्वतंत्र रूप से विकसित करने के लिए लचीलेपन की आवश्यकता नहीं है।

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

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

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

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


31
टीएल; डीआर संस्करण: केवल जटिलता जोड़ें जब यह उन समस्याओं को हल करता है जो आपके पास वास्तव में हैं।
jpmc26

1
इसे इस तरह से आर्किटेक्ट करें कि आप बाद में आसानी से माइक्रो सर्विस के लिए माइग्रेट कर सकें। उदाहरण के लिए, कीचड़ की एक बड़ी गेंद से चिंताओं को अलग करना, और अब इसे बनाए रखना आसान होगा और बाद में अलग सेवाओं के लिए भागों को स्थानांतरित करना आसान होगा। आपके पास अभी भी कॉल / मैसेज किए बिना अन्य सेवाओं पर संदेश भेजने के बिना कर्तव्यों / डोमेन के माइक्रोसेवा-प्रेरित विभाजन हो सकते हैं।
ps2goat 20

1
फाउलर का वितरित वस्तुओं का पहला नियम: मत
। एलन बेट्स

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

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