सूक्ष्मजीवविज्ञानी वास्तुकला बनाम बंद []


83

मैंने माइक्रोसर्विस के बारे में कुछ पठन किया, और मैं बहुत कम साज़िश कर रहा हूं। ऐसा लगता है कि यह दिलचस्प अवधारणा है। लेकिन मुझे आश्चर्य है, कि मोनोलिथिक आर्किटेक्चर और इसके विपरीत माइक्रोसर्विसेज का उपयोग करने के क्या फायदे और नुकसान हैं।

जब माइक्रोसर्विसेज उपयुक्त बेहतर हों, और जहां अखंड वास्तुकला के साथ जाना बेहतर हो।


6
मार्टिन फावलर ने इस विषय पर एक व्यापक लेख लिखा है। मैं आपको इसे पढ़ने के लिए अत्यधिक सुझाव देता हूं: martinfowler.com/articles/microservices.html
काज

इस लेख को देखें microservies वास्तुकला पर: medium.com/startlovingyourself/…
भगवती मालव

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

जवाबों:


76

जब मैं माइक्रोसर्विसेज की दुनिया में अपेक्षाकृत नया हूं, तो आपके प्रश्न का यथासंभव उत्तर देने का प्रयास करूंगा।

जब आप माइक्रोसर्विस आर्किटेक्चर का उपयोग करते हैं, तो आपने डिकॉउलिंग और चिंताओं को अलग किया होगा। चूंकि आप अपने आवेदन को विभाजित कर रहे हैं।

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

इसके अलावा आवेदन को तैनात करना आसान है , क्योंकि आप अलग-अलग सर्वर पर स्वतंत्र माइक्रोसर्विस बना रहे हैं और उन्हें अलग-अलग सर्वर पर तैनात कर रहे हैं। इसका मतलब यह है कि आप जब भी अपनी शेष एप्लिकेशन को फिर से बनाना चाहते हैं, तो आप सेवाओं का निर्माण और तैनाती कर सकते हैं।

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

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


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

"इसके अलावा, एप्लिकेशन को तैनात करना आसान है, क्योंकि आप स्वतंत्र माइक्रो सर्वर को अलग से बना रहे हैं और उन्हें अलग-अलग सर्वर पर तैनात कर रहे हैं। इसका मतलब है कि जब भी आप अपने बाकी एप्लिकेशन को फिर से बनाना चाहते हैं, तो आप सेवाओं का निर्माण और तैनाती कर सकते हैं।" - जब आपके पास विभिन्न सेवाओं के लिए कई प्रकार की तैनाती होती है, तो यह सामान्य रूप से कठिन में तैनाती करता है, आसान नहीं। एक CI विन्यास बनाम कई होने से, एक को बनाए रखना आसान होता है।
माइकल 6

पूरी तरह से स्वतंत्र कार्यक्षमता होने पर एकाधिक सेवाओं में मोनोलिथ को विभाजित करने का सबसे अच्छा मामला । यदि आपको पहले निर्भरता से छुटकारा नहीं मिला है, तो आप सबसे खराब स्थिति में चल सकते हैं - वितरित अखंड (तंग युग्मन - तुच्छ परिवर्तन = हर सेवा को बदलना)। अधिक विवरण देखें: माइक्रोसिविट्स स्प्लिट मानदंड
uvsmtid

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

160

यह एक बहुत ही महत्वपूर्ण प्रश्न है क्योंकि कुछ लोग माइक्रोसर्विस के चारों ओर चर्चा से फुसलाते हैं, और विचार करने के लिए व्यापार हैं। तो, माइक्रोसर्विस के लाभ और चुनौतियां क्या हैं (जब अखंड मॉडल के साथ तुलना की जाती है)?

लाभ

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

चुनौतियों

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

एक बार जब हम इन ट्रेडऑफ़्स को समझ लेते हैं , तो एक और बात है जो हमें दूसरे प्रश्न का उत्तर देने के लिए जानने की आवश्यकता है: जो कि बेहतर है, माइक्रोसर्विस या मोनथिथ? हमें आवेदन के गैर-कार्यात्मक आवश्यकताओं (गुणवत्ता विशेषता आवश्यकताओं) को जानने की आवश्यकता है। एक बार जब आप समझ जाते हैं कि प्रदर्शन बनाम स्केलेबिलिटी कितना महत्वपूर्ण है, उदाहरण के लिए, आप ट्रेडऑफ का वजन कर सकते हैं और एक शिक्षित डिजाइन निर्णय ले सकते हैं।


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

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

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

11

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

उदाहरण के लिए, अमेज़ॅन जैसी बड़ी दुकानों में, आपके पास एक निजीकरण टीम, ईकॉमर्स टीम, अवसंरचना सेवा टीम, आदि हो सकती है यदि आप माइक्रोसिस्टर्स में आना चाहते हैं, तो अमेज़न इसका एक बहुत अच्छा उदाहरण है। जेफ बेजोस ने टीमों के लिए एक अन्य टीम की सेवाओं से संवाद करने के लिए इसे एक जनादेश बना दिया, अगर उन्हें साझा कार्यक्षमता की आवश्यकता होती है। संक्षिप्त विवरण के लिए यहां देखें ।

इसके अलावा, Etsy और Netflix के इंजीनियरों ने भी ट्विटर पर microservices vs monolith के दिन में एक छोटी सी बहस की थी। बहस थोड़ी कम तकनीकी है, लेकिन साथ ही कुछ अंतर्दृष्टि प्रदान कर सकती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.