विकेन्द्रीकृत डाटा प्रबंधन - डेटाबेस को माइक्रोसेक्विस में बदलना [बंद]


23

मैं हाल ही में सॉफ़्टवेयर डिज़ाइन पर एक कोर्स कर रहा हूं और हाल ही में एक '' माइक्रोसॉफ़्ट '' मॉडल का उपयोग करने के बारे में चर्चा / सिफारिश की गई थी, जहाँ किसी सेवा के घटकों को माइक्रो-सर्विस उप-घटकों में अलग किया जाता है जो यथासंभव स्वतंत्र होते हैं।

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

इसका एक बेहतर शब्द और अधिक विस्तृत विवरण यहां पाया जा सकता है: http://martinfowler.com/articles/microservices.html अनुभाग विकेंद्रीकृत डेटा प्रबंधन के तहत

यह कहते हुए सबसे प्रमुख हिस्सा:

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

चित्र 4यहाँ छवि विवरण दर्ज करें

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


6
मुझे यकीन नहीं है कि यह सवाल प्रोग्रामर.स्टैकएक्सचेंज के दायरे से बाहर कैसे है। यह एक विशिष्ट तकनीक और इसके पेशेवरों और विपक्षों पर एक सवाल है जो यह निर्धारित करता है कि तकनीक का उपयोग कब हुआ। मैंने दौरे और मेटा साइट ( meta.stackexchange.com/questions/68384/… ) को देखा है। क्या आप कृपया स्पष्ट कर सकते हैं कि मुझे प्रश्न को कैसे सुधारना चाहिए?
थिंकबोनोबो

जवाबों:


35

आइए बात करते हैं सकारात्मक और नकारात्मक microservice दृष्टिकोण की।

पहला नकारात्मक। जब आप microservices बनाते हैं, तो आप अपने कोड में निहित जटिलता जोड़ रहे हैं। आप ओवरहेड जोड़ रहे हैं। आप पर्यावरण (जैसे डेवलपर्स के लिए) को दोहराने के लिए कठिन बना रहे हैं। आप डिबगिंग रुक-रुक कर समस्याओं को कठिन बना रहे हैं।

मुझे एक वास्तविक नकारात्मक पहलू समझाएं। काल्पनिक रूप से उस मामले पर विचार करें जहां आपके पास पृष्ठ उत्पन्न करते समय 100 माइक्रोसेवाएं हैं, जिनमें से प्रत्येक समय 99.9% सही काम करता है। लेकिन उस समय के 0.05% वे गलत परिणाम देते हैं। और उस समय का 0.05% एक धीमा कनेक्शन अनुरोध है जहां, कहने के लिए, कनेक्ट करने के लिए एक टीसीपी / आईपी टाइमआउट की आवश्यकता होती है और इसमें 5 सेकंड लगते हैं। आपके अनुरोध के पूरी तरह से काम करने के समय का लगभग 90.5%। लेकिन लगभग 5% समय आपके पास गलत परिणाम है और लगभग 5% समय आपका पृष्ठ धीमा है। और हर गैर-प्रजनन योग्य विफलता का एक अलग कारण है।

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

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

तो उस अखंड दृष्टिकोण का क्या?

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

ठीक है, फिर कंपनियां माइक्रोसिस्टर्सेज के दृष्टिकोण पर क्यों जाती हैं?

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

अंगूठे का मेरा व्यक्तिगत नियम यह है कि कोडिंग से स्क्रिप्टिंग भाषा (जैसे पायथन) से अनुकूलित C ++ में जाना आम तौर पर प्रदर्शन और स्मृति उपयोग दोनों पर परिमाण के 1-2 आदेशों में सुधार कर सकता है। किसी वितरित आर्किटेक्चर के लिए दूसरे रास्ते पर जाना संसाधन आवश्यकताओं को बढ़ाता है लेकिन आपको अनिश्चित काल के लिए स्केल करता है। आप एक वितरित वास्तुकला काम कर सकते हैं, लेकिन ऐसा करना कठिन है।

इसलिए मैं कहूंगा कि यदि आप एक निजी परियोजना शुरू कर रहे हैं, तो अखंड जाएं। अच्छी तरह से करना सीखें। वितरित न करें क्योंकि (Google | eBay | Amazon | etc) हैं। यदि आप वितरित की गई किसी बड़ी कंपनी में उतरते हैं, तो ध्यान दें कि वे इसे कैसे काम करते हैं और इसे खराब नहीं करते हैं। और यदि आप संक्रमण करने के लिए हवा करते हैं, तो बहुत सावधान रहें, क्योंकि आप बहुत कठिन काम कर रहे हैं जो बहुत आसान है, बहुत गलत है।

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


3
एक बहुत ही व्यावहारिक जवाब। इस ज्ञान को प्रदान करने के लिए धन्यवाद।
थिंकबोनोबो

यहां मार्टिन फ़ॉवलर (3 एक) से हाल ही में बात की गई है जो इनमें से कुछ बिंदुओं को छूता है।
Whymarrh

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

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

इस विषय पर मार्टिन फाउलर का एक और लिंक: मोनोलिथ फर्स्ट
ड्रिफ्टकैचर

5

मैं तहे दिल से btilly के जवाब से सहमत हूं, लेकिन सिर्फ माइक्रोसर्विस के लिए एक और सकारात्मक जोड़ना चाहता था, मुझे लगता है कि इसके पीछे एक मूल प्रेरणा है।

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

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

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


यह सच है। शेष लेख विशेष रूप से यह बताता है कि यह 'व्यावसायिक क्षमताओं' द्वारा विभाजन को कैसे प्रोत्साहित करता है। यह निश्चित रूप से एक महत्वपूर्ण लाभ है।
थिंकबोनोबो

2

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

एक अखंड डेटाबेस की तुलना में यह बहुत अधिक उपरि नहीं था, लेकिन मुझे लगता है कि यह ज्यादातर डेटा की प्रकृति के कारण था जो पहले से ही अलग-अलग समूहों में था।

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

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

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