स्केलिंग मोनोलिथ बनाम स्केलिंग माइक्रोसर्विस


15

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

हम कहते हैं कि हमारे पास 10 माइक्रोसेरवे से युक्त एक आवेदन था, जिसमें से 9 में प्रत्येक दो इंस्टेंसेस (अतिरेक के लिए) थे और उनमें से एक में 4 इंस्टेंस के साथ लोड (स्केलेबिलिटी) को संभालने के लिए था। प्रो-माइक्रोसर्विस तर्क तब है कि आप अन्य सेवाओं से इस miroservice को अप्रत्यक्ष रूप से स्केल करने में सक्षम हैं।

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

क्या मैं कुछ भूल रहा हूँ?


3
आप कितनी बड़ी मोनोलिथ बात कर रहे हैं? क्योंकि मुझे लगता है कि यह रैम की "थोड़ी बड़ी" राशि से अधिक हो सकता है। तैनाती के समय का उल्लेख नहीं करना - बग को ठीक करना 4. के बजाय 22 परिनियोजन ले सकता है। लेकिन हो सकता है कि आपका मोनोलिथ छोटा हो और तैनाती में बहुत समय न लगे, डेटाबेस माइग्रेशन में बहुत समय नहीं लगता है, और इसी तरह।
थॉमस ओवेन्स

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

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

ध्यान दें कि बेसिक का ओवरहेड "इसे रन कोड प्राप्त करना" आवश्यक रूप से उतना बड़ा नहीं है जितना कि आप इसे अपने जावा अनुप्रयोगों से जान सकते हैं, जहां अक्सर पूरा jvm सेवा छवि का हिस्सा होता है।
फ्रैंक हॉपकिंस

जवाबों:


21

प्रोसेसर लोड को कम करने के लिए माइक्रोसर्विस की बात नहीं है। वास्तव में, संचार के ओवरहेड और कार्यों की पुनरावृत्ति के कारण जो वैश्विक उपयोगिता कोड हुआ करते थे, यह आमतौर पर प्रोसेसर लोड को कुछ हद तक बढ़ाता है

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

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


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

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

»हम ऐसा इसलिए करते हैं क्योंकि हमें जटिलता के कारण हमें बेहतर करना है, और एक उप-अपनाने की स्थिति में सबसे अच्छा बना रहे हैं।« हाँ मेरे लिए, कि यह नाखून!
थॉमस जंक

मुझे उत्तर के अंतिम भाग से असहमत होना होगा। सूक्ष्म सेवाएं एक मोनोलिथ की तुलना में स्वाभाविक रूप से बेहतर होती हैं, क्योंकि वे एक से अधिक कंप्यूटरों का उपयोग करती हैं
इवान

1
@ आप मोनोलिथ के साथ एक से अधिक कंप्यूटर का उपयोग कर सकते हैं।
बहरा

3

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

हालाँकि। जैसे ही आपके पास असंतुलन होता है, कहते हैं कि सेवा 5 2min के लिए 100% सीपीयू लेता है, आप उस सेवा को अपने बॉक्स पर स्थानांतरित करना चाहते हैं ताकि यह अन्य सभी सेवाओं को अवरुद्ध न करें यदि यह चलता है।

यदि लोड के कारण 5 बार सेवा से कॉल किया जाता है, तो आपके एप्लिकेशन के कुछ कार्य सभी के बजाय विफल हो जाएंगे।

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

लेकिन आमतौर पर उनके स्वभाव से मोनोलिथ सेवाओं का एक ढीला संग्रह नहीं होता है जो एक ही बॉक्स पर स्थापित होते हैं। मॉड्यूल के बीच मेमोरी कॉल में होगा जो ऐप की विफलता का कारण होगा।


1

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


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