माइक्रोसर्विसेस: मोनोलिथफर्स्ट?


9

मैं microservice आर्किटेक्चर पर शोध कर रहा हूँ जो सभी पेशेवरों और विपक्षों, व्हाट्सएप और व्हाट्स, इत्यादि का एक उच्च स्तरीय अवलोकन प्राप्त करने की कोशिश कर रहा है। बहुत सारी जानकारी जो मैं पढ़ रहा हूँ / देख रहा हूँ वह ThoughtWorks (मार्टिन फाउलर, नील फोर्ड, एट) से आ रही है। अल)।

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

विशेष रूप से एक बात यह है:

जैसा कि मैंने माइक्रोसर्विस आर्किटेक्चर का उपयोग करके टीमों के बारे में कहानियां सुनी हैं, मैंने एक सामान्य पैटर्न पर ध्यान दिया है।

  • लगभग सभी सफल microservice कहानियाँ एक मोनोलिथ के साथ शुरू हुई हैं जो बहुत बड़ी हो गई थीं और टूट गई थीं
  • लगभग सभी मामलों में जहां मैंने एक प्रणाली के बारे में सुना है जिसे खरोंच से एक माइक्रोसैस प्रणाली के रूप में बनाया गया था, यह गंभीर परेशानी में समाप्त हो गया है।

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

(संदर्भ: https://martinfowler.com/bliki/MonolithFirst.html - उनका जोर)

अब, 3 साल बाद और माइक्रोसर्विस के साथ एक अधिक सर्वव्यापी शब्द है, क्या यह आम तौर पर सहमत है कि एक नई प्रणाली आमतौर पर बड़े (-थान-माइक्रोसर्विस-लेकिन-छोटे-से-मोनोलिथ) सर्विस बंक के साथ शुरू करने और बनाने के लिए बेहतर है। एक विकासवादी उपाय के हिस्से के रूप में उन्हें अधिक दानेदार?

या, ऊपर दिए गए कथनों के विपरीत, एक ग्रैन्युलर माइक्रोसर्विस आर्किटेक्चर के साथ स्क्रैच से प्रोजेक्ट शुरू करने का कोई मानदंड है?

एक सामान्य सामान्य दृष्टिकोण की तरह लगता है, लेकिन समुदाय के विचारों के लिए उत्सुक है।

जवाबों:


2

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

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

माइक्रोसर्विस का लाभ यह है कि आप मांग पर किए जा रहे कार्य को मापने के लिए उदाहरण जोड़ सकते हैं। यदि आपका कुछ काम फटने की स्थिति में आता है, तो यह समझ में आ सकता है कि यह अपना स्वयं का माइक्रो सर्विस है।

सामान्य रूप में:

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

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

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


13

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


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

1
जवाब से पूरी तरह सहमत हैं। एक अच्छी तरह से निर्मित और सही ढंग से संचालित मोनोलिथ सूक्ष्मजीवियों को सबसे अधिक (हालांकि सभी नहीं) लाभ प्रदान करता है। दूसरी ओर, माइक्रोसॉफ़्ट के पास अपने स्वयं के कुछ बहुत बड़े मुद्दे हैं।
मिलोस मृदोविक

@jleach अच्छे मॉड्यूलरीकरण का एक गुण स्वतंत्र तैनाती है। यदि आपको मामूली मॉड्यूल अपडेट करने के लिए अपने पूरे मोनोलिथ को फिर से जोड़ना और फिर से तैयार करना है, तो आप कुछ गलत कर रहे हैं।
मिलोस मृदोविक

2
यह एक अच्छा तरीका है। Microservice करने के लिए एक microservice का निर्माण न करें। समस्याओं को हल करने के लिए माइक्रोसिस्टवर्क आर्किटेक्चर का उपयोग किया जाना चाहिए, लेकिन वे अपनी स्वयं की समस्याओं के एक सेट के साथ भी आते हैं, इसलिए यदि आप उन ट्रेडऑफ़्स के बारे में तैयार / जागरूक नहीं हैं, तो आपको वास्तव में जमीन से माइक्रोसर्विस को विकसित करने के बारे में सावधान रहना चाहिए।
रयान

1
@MilosMrdovic, मॉड्यूल दृष्टिकोण के साथ भी, आप अभी भी परिनियोजन में कुछ दक्षता हासिल कर सकते हैं क्योंकि आपको अपने संपूर्ण मोनोलिथ को पुन: प्राप्त करने की आवश्यकता नहीं है, केवल वह मॉड्यूल जो आप अपडेट कर रहे हैं। यदि आपका मॉड्यूल सभी गुणवत्ता द्वार से गुजरता है, तो आप इसे बना सकते हैं और इसे शिप कर सकते हैं। तब आपके मोनोलिथ को बस निर्भरता संस्करण और रीडेप्लॉय को अपडेट करना होगा। आपको किसी अन्य मॉड्यूल के पुनर्निर्माण की आवश्यकता नहीं होगी।
जिग्गी

2

मेरी राय में, पहले एक मोनोलिथ विकसित करना फायदेमंद हो सकता है (या बेहतर: एक मोनोलिथ के रूप में आपके आवेदन के कुछ हिस्सों को विकसित करना)।

ऐसे मामले हैं जब आप डोमेन और आपकी समस्या की सीमाओं के बारे में अनिश्चित हैं (जैसे मैं एक जहाज प्रबंधन साइट का निर्माण करता हूं, क्या मुझे एक जहाज सेवा और एक बेड़े सेवा की आवश्यकता है, या एक जहाज सेवा पर्याप्त है?), और ऐसे मामलों में एक मोनोलिथ को विकसित करना आसान हो सकता है।

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


1
"और ऐसे मामलों में एक माइक्रोसिस्ट सेवा को विकसित करना आसान हो सकता है" - क्या आपका मतलब वहां मौजूद मोनोलिथ के बारे में बात करना था?
आमोन

@amon धन्यवाद, मैंने वाक्य को ठीक कर दिया है - मेरे बेटे ने मुझे 34235 बार बाधित किया इसलिए मैं भ्रमित था;)
क्रिश्चियन सॉयर

जब मैं आपके पहले वाक्य से सहमत हूं, तो मुझे लगता है कि आपको यह विचार करना चाहिए कि आपके मोनोलिथ को पहले से ही अंदर "मॉड्यूलर-जैसा" होना चाहिए, अन्यथा आप सब कुछ गिरने के बिना कुछ भी अलग करने में सक्षम नहीं होंगे।
वॉलफ्रैट

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

1

मुझे पूरा यकीन है कि एमएफ द्वारा इस सटीक लेख पर कुछ सवाल पूछे गए हैं।

इस पर मेरा यह है:

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

चाहे आपका आधा मोनोलिथ + एक संदेश पंक्ति और कार्यकर्ता की एक जोड़ी 'माइक्रोसर्विस आर्किटेक्चर' के रूप में गिना जाए, एक तर्क है कि नीचे पब है, लेकिन आप निश्चित रूप से इसे कॉल करेंगे कि जब आप प्रोजेक्ट के बारे में बात करते हैं।

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

हमें यह भी याद रखना होगा कि एमएफ एक बड़े ओओपी परिप्रेक्ष्य से लिखता है। वह स्वाभाविक रूप से अधिक आधुनिक वितरित दृष्टिकोण पर संदेह करता है।

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


धन्यवाद। यदि एमएफ थोड़ा पक्षपाती हो जाता है, तो क्या कोई ऐसा व्यक्ति है जिसका काम मैं परिप्रेक्ष्य की गहराई हासिल करने में मदद करने के लिए विपरीत दिशा में अध्ययन कर सकता हूं?
jleach

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

0

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

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


माइक्रोसर्विसेज वास्तव में बहुत सारी संगठनात्मक समस्याओं को हल करते हैं। यदि प्रत्येक सेवा का स्वामी है, तो आप जानते हैं कि जब कुछ काम नहीं करता है, तो आप कैसे घुट सकते हैं।
जिग्गी

@ जिग्गी: यदि कोड को अच्छी तरह से संशोधित किया गया है, तो आपको यह जानने की आवश्यकता नहीं है कि इसे कई सेवाओं में विभाजित करने की आवश्यकता है ताकि पता चल सके कि किसको घुटना है।
रयान

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