हमें इसकी आवश्यकता भी क्यों है?
माइक्रोसर्विस का भारी लाभ- और अधिक बड़े पैमाने पर, SOA- इंटर्नल के एब्स्ट्रक्शन का उच्च स्तर है - न केवल कार्यान्वयन, बल्कि उपयोग की जा रही तकनीकों का भी। उदाहरण के लिए, यदि एक प्रणाली को पाँच टीमों द्वारा पाँच माइक्रोसिस्टर्स के रूप में विकसित किया जाता है, तो एक टीम अपनी राय के लिए अन्य टीमों से पूछे बिना भी पूरी तरह से अलग तकनीकी ढेर (उदाहरण के लिए Microsoft स्टैक से LAMP तक) को स्थानांतरित करने का निर्णय ले सकती है।
अमेज़ॅन AWS या ट्वाइलियो को देखें। क्या आपको पता है कि जावा या रूबी में उनकी सेवाएं लागू हैं या नहीं? क्या वे Oracle या PostgreSQL या Cassandra या MongoDB का उपयोग करते हैं? वे कितनी मशीनों का उपयोग करते हैं? क्या आपको भी इसकी परवाह है; दूसरे शब्दों में, क्या वे तकनीकी विकल्प उन सेवाओं को उपयोग करने के तरीके को प्रभावित कर रहे हैं? ... और अधिक महत्वपूर्ण बात, यदि वे एक अलग डेटाबेस में जाते हैं, तो क्या आपको अपने क्लाइंट एप्लिकेशन को तदनुसार बदलना होगा?
अब, यदि दो सेवाएं एक ही डेटाबेस का उपयोग करती हैं, तो क्या होता है? यहां उन मुद्दों का एक छोटा हिस्सा है जो उत्पन्न हो सकते हैं:
टीम का विकास करने वाली सेवा 1 SQL Server 2012 से SQL Server 2016 में जाना चाहती है। हालाँकि, टीम 2 एक deprecated सुविधा पर निर्भर करती है जिसे SQL Server 2016 में हटा दिया गया था।
सेवा 1 एक बहुत बड़ी सफलता है। डेटाबेस को दो मशीनों (मास्टर और फ़ेलओवर) पर होस्ट करना अब कोई विकल्प नहीं है। लेकिन क्लस्टर को कई मशीनों तक स्केल करने के लिए रणनीति बनाने की आवश्यकता होती है जैसे कि शार्किंग। इस बीच, टीम 2 वर्तमान पैमाने से खुश है, और किसी और चीज के लिए स्थानांतरित करने का कोई कारण नहीं देखता है।
सेवा 1 को अपने डिफ़ॉल्ट एन्कोडिंग के रूप में UTF-8 में जाना चाहिए। सेवा 2, हालांकि, कोड पेज 1252 विंडोज लैटिन 1 का उपयोग करके खुश है।
सेवा 1 एक विशिष्ट नाम के साथ एक उपयोगकर्ता जोड़ने का फैसला करता है। हालाँकि, यह उपयोगकर्ता पहले से मौजूद है, दूसरी टीम द्वारा कुछ महीने पहले बनाया गया था।
सेवा 1 को विभिन्न विशेषताओं की बहुत आवश्यकता है। सेवा 2 एक अत्यधिक महत्वपूर्ण घटक है और हमलों के जोखिम को कम करने के लिए डेटाबेस सुविधाओं को अपने न्यूनतम स्तर पर रखने की आवश्यकता है।
सेवा 1 के लिए 15 टीबी डिस्क स्थान की आवश्यकता होती है; गति महत्वपूर्ण नहीं है, इसलिए साधारण हार्ड डिस्क पूरी तरह से ठीक हैं। सेवा 2 को अधिकतम 50 जीबी की आवश्यकता होती है, लेकिन इसे जितनी जल्दी हो सके एक्सेस करने की आवश्यकता होती है, जिसका अर्थ है कि डेटा को एसएसडी पर संग्रहीत किया जाना चाहिए।
...
हर छोटी पसंद हर किसी को प्रभावित करती है। हर फैसले को हर टीम के लोगों को सहयोग से लेना होगा। समझौता करना पड़ता है। एसओए के संदर्भ में जो भी आप चाहते हैं उसे करने के लिए एक पूर्ण स्वतंत्रता की तुलना करें।
यह बहुत [...] असहनीय है।
फिर आप गलत कर रहे हैं। मुझे लगता है कि आप मैन्युअल रूप से तैनात कर रहे हैं ।
यह नहीं है कि चीजों को कैसे किया जाना चाहिए। आपको वर्चुअल मशीन (या डॉकर कंटेनर) की तैनाती को स्वचालित करने की आवश्यकता है जो डेटाबेस चलाते हैं। एक बार जब आप उन्हें स्वचालित कर लेते हैं, तो दो सर्वर या बीस सर्वर या दो हजार सर्वर को तैनात करना बहुत अलग नहीं होता है।
पृथक डेटाबेस के बारे में जादू की बात यह है कि यह बेहद प्रबंधनीय है । क्या आपने दर्जनों टीमों द्वारा उपयोग किए जाने वाले विशाल डेटाबेस का प्रबंधन करने की कोशिश की है? यह एक दुःस्वप्न है। हर टीम के पास विशिष्ट अनुरोध होते हैं, और जैसे ही आप किसी चीज को छूते हैं, यह किसी को प्रभावित करता है। एक ऐप के साथ जोड़े गए डेटाबेस के साथ, गुंजाइश बहुत संकीर्ण हो जाती है, जिसका अर्थ है कि सोचने के लिए बहुत कम चीजें हैं।
यदि किसी विशाल डेटाबेस को विशेष सिस्टम प्रशासक की आवश्यकता होती है, तो केवल एक टीम द्वारा उपयोग किए जाने वाले डेटाबेस को अनिवार्य रूप से इस टीम द्वारा प्रबंधित किया जा सकता है (DevOps भी इसके बारे में है), सिस्टम प्रशासक के समय को मुक्त करता है।
यह बहुत महंगा है
लागत को परिभाषित करें।
लाइसेंसिंग लागत डेटाबेस पर निर्भर करती है। क्लाउड कंप्यूटिंग के युग में, मुझे पूरा यकीन है कि सभी प्रमुख खिलाड़ियों ने संदर्भ को समायोजित करने के लिए अपनी लाइसेंसिंग को फिर से डिज़ाइन किया जहां एक विशाल डेटाबेस के बजाय, बहुत सारे छोटे हैं। यदि नहीं, तो आप एक अलग डेटाबेस में जाने पर विचार कर सकते हैं। बहुत सारे ओपन सोर्स वाले हैं, वैसे।
यदि आप प्रसंस्करण शक्ति के बारे में बात कर रहे हैं, तो वर्चुअल मशीन और कंटेनर दोनों सीपीयू के अनुकूल हैं, और मैं इस बात की पुष्टि नहीं करूंगा कि एक बहुत बड़ा डेटाबेस एक ही काम करने वाले बहुत से छोटे से कम सीपीयू का उपभोग करेगा।
यदि आपका मुद्दा मेमोरी है, तो वर्चुअल मशीनें आपके लिए एक अच्छा विकल्प नहीं हैं। कंटेनर हैं। आप जितने चाहें उतने स्पैन कर पाएंगे, यह जानकर कि वे जरूरत से ज्यादा रैम का उपभोग नहीं करेंगे। जबकि एक बड़े एकल की तुलना में बहुत सारे छोटे डेटाबेस के लिए कुल मेमोरी खपत अधिक होगी, मुझे लगता है कि अंतर बहुत महत्वपूर्ण नहीं होगा। YMMV।