क्या हम बहुत पुराने स्कूल के दृष्टिकोण के लिए माइक्रोसॉर्क्स के साथ पूर्ण चक्र में आ गए हैं?


9

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

अज्ञेय तरीके से, आप कर सकते हैं, और मैं कॉर्बा के लिए एक RESTful API को अमूर्त करने के लिए लाभ का तर्क दूंगा। या, अधिक जावा-केंद्रित तरीके से, जेएमएस या एमडीबी।

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

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

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

बेशक, इन चरम सीमाओं के बीच विकल्पों की एक अनिश्चित राशि है।

शार्क बनाम गोरिल्ला ... जाओ! (पांडित्य के लिए, यह विडंबनापूर्ण है, और मेरा इरादा बिल्कुल नहीं है। प्रश्न का अर्थ अंकित मूल्य पर लिया जाना है। यदि प्रश्न को बेहतर बनाया जा सकता है, तो कृपया ऐसा करें, या टिप्पणी करें और मैं ठीक कर दूंगा। )

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

क्षैतिज स्केलिंग इतना प्रचलित, या कम से कम वांछनीय क्यों है?


4
मतदान बंद। यह स्पष्ट नहीं है कि आप क्या पूछ रहे हैं और आप इसे क्यों पूछ रहे हैं। माइक्रोसवर्क आर्किटेक्चर सिर्फ एक और आर्किटेक्चर है। न कुछ ज्यादा, न कुछ कम।
davidk01

1
आपको यह लेख सार्थक भी लग सकता है: devweek.com/blog/microservices-the-good-the-bad-and-the-ugly
davidk01

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

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

1
@ तुफिर जैसा कि एमएस से पहले कहा गया था कि यह सिर्फ एक दृष्टिकोण है, इसके फायदे और नुकसान होंगे। मैंने वास्तव में इस दृष्टिकोण के साथ काम किया (इससे पहले कि मैंने सुना है कि कई परियोजनाओं पर इसका एक विशेष नाम है)। एक साइड नोट के रूप में - यह एक झरना नहीं है, यह वही है जो आप इसे बनाते हैं। जैसा कि मैंने मोबाइल ओएस के विकास (टीम में) के एक प्रोजेक्ट के लिए काम किया है, यह तरीका ही एक ऐसा तरीका है, क्योंकि ओएस नहीं बनाया जा सकता है giant blob, क्योंकि इसमें इंटरफेस है, इसलिए कर्नेल से शुरू होने वाला प्रत्येक भाग एमएस की तरह है, और पहली बात किसी भी टीम ने कोड लिखना शुरू कर दिया था विनिर्देशों v0.0.1 पर सहमत होने के लिए।
एलेक्सी कमेंस्की

जवाबों:


2

टी एल; डॉ। मुझे बहुत सारे माइक्रोसेवर फ्लेवर कूल-एड पीने का आनंद मिला है, इसलिए मैं उनके पीछे के कारणों पर थोड़ा बात कर सकता हूं।

पेशेवरों:

  • सेवाओं को पता है कि उनकी निर्भरता स्थिर है और इसमें सेंकना करने का समय है
  • नए संस्करणों की रोलिंग तैनाती की अनुमति दें
  • उच्चतर परतों को प्रभावित किए बिना घटकों को वापस लाने की अनुमति दें।

विपक्ष:

  • आप अपनी निर्भरता की नई और चमकदार विशेषताओं का उपयोग नहीं कर सकते।
  • आप कभी भी एपीआई पीछे की संगतता को नहीं तोड़ सकते (या कम से कम कई विकास चक्रों के लिए नहीं)।

मुझे लगता है कि आप मौलिक रूप से गलतफहमी में रहते हैं कि कैसे एक माइक्रोसेस्क आर्किटेक्चर काम करने वाला है। जिस तरह से इसे चलाया जाना चाहिए वह यह है कि हर माइक्रोसेव (एमएस के रूप में यहां से संदर्भित) में एक कठोर एपीआई है जो इसके सभी ग्राहकों को सहमत है। MS को वह परिवर्तन करने की अनुमति है जो वह तब तक चाहता है जब तक API संरक्षित है। जब तक एपीआई संरक्षित है तब तक एमएस को फेंक दिया जा सकता है और खरोंच से फिर से लिखा जा सकता है।

ढीली युग्मन में सहायता के लिए, प्रत्येक एमएस अपनी निर्भरता के संस्करण n-1 पर निर्भर करता है। यह सेवा के वर्तमान संस्करण के लिए कम स्थिर और थोड़ा अधिक जोखिम भरा होने की अनुमति देता है। यह संस्करणों को तरंगों में बाहर आने की भी अनुमति देता है। पहले 1 सर्वर अपग्रेड किया गया, फिर आधा और अंत में बाकी। यदि वर्तमान संस्करण कभी भी किसी भी गंभीर मुद्दे को विकसित करता है, तो एमएस को पिछले संस्करण में वापस ले जाया जा सकता है, जिसमें अन्य परतों में कार्यक्षमता का कोई नुकसान नहीं है।

अगर एपीआई को बदलना है, तो इसे इस तरह से बदलना होगा जो पीछे की ओर संगत है।


"जब तक एपीआई संरक्षित है, एमएस को फेंक दिया जा सकता है और खरोंच से फिर से लिखा जा सकता है।" - वहाँ नया है, लेकिन ठीक है। प्रदर्शन के संदर्भ में, स्पेक्ट्रम के विपरीत छोर पर, इन सभी एमएस की तुलना एक अखंड ऐप / सेवा / प्रणाली से कैसे की जाती है? वितरण के संदर्भ में, ऐसा लगता है , और कृपया मुझे सही करें अगर गलत है, तो n MS के एक मशीन पर डालने से संभावित प्रदर्शन लाभ है ... एक मेनफ्रेम पर वर्चुअलाइज्ड ?? यह लगभग उतना ही है जितना कि आप एमएस के क्षैतिज रूप से सरल हो जाते हैं, तो यह उनके लिए लंबवत पैमाने पर हो जाता है ...? मेरे प्रश्न को न पढ़ने के लिए बोनस अंक :)
Thufir

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

5

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

ढीले युग्मन के बारे में, मुझे लगता है कि आपने लक्ष्य को थोड़ा गलत समझा है। यदि कार्य A को कार्य B को कॉल करने की आवश्यकता है, तो ए और बी 100% को डिकूप करने का तरीका कभी नहीं होगा। कभी होने वाला नहीं। आप यह सुनिश्चित कर सकते हैं कि यदि कार्य B कार्य C को कॉल करता है, तो कार्य C को कभी भी ए के परिवर्तनों के बारे में चिंता नहीं करनी चाहिए। यदि ये तीन कार्य सभी एक साथ एक बड़े ब्लॉब में जुड़े हुए हैं, तो एक दूसरे को संरचनाएं दे रहे हैं, तो एक है महत्वपूर्ण मौका है कि अगर उनमें से कोई भी करता है तो उन्हें सभी को बदलना होगा। लेकिन अगर तीनों माइक्रोसेर्विस हैं, तो आपको मूल रूप से गारंटी दी जाती है कि A में परिवर्तन केवल B को ही अपडेट करने के लिए बाध्य करेगा (जब तक कि यह A की कोर कार्यक्षमता में इतना बड़ा परिवर्तन न हो कि शायद आपने इसे एक नई सेवा बना लिया हो)। यह विशेष रूप से सच है अगर सभी माइक्रोसॉर्क्स अपडेट एक बैकवर्ड संगत तरीके से किए जाते हैं, जो उन्हें होना चाहिए।

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

मैं COBRA और MDB के बारे में टिप्पणी को पूरी तरह से नहीं समझता, क्योंकि वे सॉफ्टवेयर आर्किटेक्चर नहीं हैं, बल्कि एक के घटक हैं; मेरी समझ से वे आपके माइक्रोसर्विसेज के मैसेजिंग प्रोटोकॉल को परिभाषित करने के संभावित तरीके हैं और / या कहा गया है कि माइक्रोसॉर्विस, खुद में और खुद के विकल्प के लिए माइक्रोसर्विस को नहीं।


1
"अगर इन तीन कार्यों को एक बड़े ब्लॉब में एक साथ जोड़ा जाता है ..." मेरे पास केवल इस पर जावा परिप्रेक्ष्य है, लेकिन मैं कहूंगा "नहीं," बुरा विचार, ऐसा मत करो। अपनी सटीक बात को पूरा करने के लिए एक लाइब्रेरी बनाएं, एपीआई # 1, एपीआई # 2, आदि। "लेकिन सी को ए में परिवर्तन के बारे में चिंता नहीं करनी चाहिए," क्योंकि सी केवल बी का ग्राहक है और ए का नहीं। । उस संबंध में, मुझे ऐसा बिल्कुल नहीं लगता है कि क्षमा करें। मुझे पता है कि मैंने जो सवाल पूछा था वह फ़र्ज़ी था। यह एक फजी सवाल है क्योंकि मैं इस बारे में फजी हूं कि यह सब क्या है। प्रत्येक और हर उत्तर मेरे लिए उपयोगी है, यदि केवल मेरी शब्दावली के साथ मदद करने के लिए।
तुफिर

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

CORBA एक (वितरित) तकनीक है जो वितरित आर्किटेक्चर को एक समय में (1990 के अंत में) सक्षम करती है जब उन्हें परिभाषित करने के लिए अभी तक व्यापक नाम नहीं थे। आप मोटे अनाज वाले या बारीक दाने वाले कोर्बा-आधारित सिस्टम को लागू करने के लिए स्वतंत्र थे जो बाद में SOA या माइक्रोसर्विस कहलाए। CORBA जीवित नहीं था, लेकिन हम इसे फिर से कर रहे हैं, बस एक अलग तकनीक के साथ। समस्या, हालांकि, प्रौद्योगिकी नहीं थी। तो हाँ, हम पूरा चक्कर लगा रहे हैं। मुझे उम्मीद है कि हमने इस प्रक्रिया में कुछ सीखा।
xtian

4

यह किसी तरह कैसे बेहतर है कि ये सेवाएं विभिन्न मशीनों में बिखरी हुई हैं?

मेघ के कारण।

अभी तक हंसी हुई? गंभीरता से हालांकि - कई व्यवसायों के लिए, सॉफ्टवेयर के लिए सबसे बड़ी लागत अब सॉफ्टवेयर नहीं है। यह बैंडविड्थ, हार्डवेयर, सीडीएन लागत आदि है। अब जबकि सभी के पास एक मोबाइल डिवाइस है, तो बस इतना अधिक ट्रैफ़िक है। और यह केवल बदतर हो जाएगा क्योंकि आपके टोस्टर को अपनी इंटरनेट कनेक्टिविटी मिलती है।

इसलिए व्यवसाय उन लागतों का प्रबंधन करना चाहते हैं। विशेष रूप से, वे व्यवसाय की समस्या को संभालने की कोशिश कर रहे हैं "अगर यह बात चल रही है, तो मैं अपने सॉफ़्टवेयर को प्राप्त करने / उपयोग करने वाले लाखों लोगों की सेवा कैसे कर सकता हूं - सर्वर के लिए समय का भुगतान किए बिना लाखों लोगों को मेरे सॉफ़्टवेयर का उपयोग / प्राप्त करने की सेवा करने के लिए। ? "।

क्षैतिज स्केलिंग इतना प्रचलित, या कम से कम वांछनीय क्यों है?

क्योंकि यह इस (बड़ी और बढ़ती) व्यावसायिक समस्या का जवाब देता है।

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

यह भी अच्छा है क्योंकि यह आपको सर्वर आवंटन को टालने की अनुमति देता है ताकि आप कर सकें:

  1. आपके पास जो भी सर्वर हैं उनका सबसे अधिक उपयोग करें, थोड़ा "बेकार" छोड़कर।
  2. अपने सॉफ़्टवेयर के प्रदर्शन तत्वों को मापें।
  3. रिलीज की वजह से तैनाती / डाउन टाइम कम करना।

बहुत बारीक तैनाती होने से वे दो चीजें आसान / बेहतर हो जाती हैं (चिंताओं के बेहतर पृथक्करण को लागू करने में मदद करने के अलावा)।


ठीक है, मैं फायदा देख सकता हूं। प्रवेश के लिए एक कम अवरोध है, लेकिन यह बड़े पैमाने पर हो सकता है। मुझे लगता है कि एक पाश के लिए मुझे क्या फेंकता है जब आप क्षैतिज रूप से एमएस के पैमाने पर होते हैं, तो यह सिर्फ लगता है ... बहुत ... रेट्रो? कुछ कुछ। मैं शब्दों को नहीं रख सकता कि यह सिर्फ गलत क्यों लगता है।
थोफिर

एप्लिकेशन स्केलिंग एक ऐसी समस्या है, जिसके लिए जरूरी नहीं है कि आपको माइक्रोसॉफ़्ट की आवश्यकता हो: आप AWS (यहां तक ​​कि मांग पर) पर बहुत आसानी से VM की शक्ति बढ़ा सकते हैं, या आप पारंपरिक वास्तुकला में लोड बैलेंसर के पीछे अधिक वीएम जोड़ सकते हैं।
xtian

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