मोनोलिथ से माइक्रोसर्विस में माइग्रेट करते समय विदेशी प्रमुख बाधाओं को कैसे संभालें?


20

मेरी टीम एक ASP ASP अनुप्रयोग से .NET कोर और Kubernetes पर माइग्रेट कर रही है। कोड परिवर्तन के रूप में अच्छी तरह के रूप में होने की उम्मीद की जा रही है, लेकिन लगता है कि जहां मेरी टीम डेटाबेस के आसपास बहुत कलह का सामना कर रही है।

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

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

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

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


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

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

3
मुझे यकीन है कि आप ग्राहक रोमांचित होंगे कि उन्होंने जिस ऑर्डर को 0.05ms तेजी से रखा था वह रद्द हो जाता है क्योंकि किसी और ने उसी उत्पाद का आदेश दिया था जब स्टॉक में केवल एक ही बचा था।
एंडी

@amon इसे उत्तर दें और मैं इसे बढ़ा दूंगा। यह एक अच्छा सवाल है और पेशेवरों और विपक्षों का उचित प्रतिनिधित्व करने की आवश्यकता है।
mcottle

@mcottle ठीक है, किया!
आमोन

जवाबों:


20

कोई स्पष्ट समाधान नहीं है क्योंकि यह पूरी तरह से आपके संदर्भ पर निर्भर करता है - विशेष रूप से, आपके सिस्टम को किन आयामों के साथ स्केल करना है और आपकी वास्तविक समस्याएं क्या हैं। क्या डेटाबेस वास्तव में आपकी अड़चन है?

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

वितरित डेटा मुश्किल है।

एक ही लचीलापन जो बेहतर स्केलिंग को सक्षम करता है, वह कमजोर गारंटी का फ्लिप पक्ष है। विशेष रूप से, वितरित सिस्टम के बारे में तर्क करने के लिए बहुत कठिन हैं।

परमाणु अद्यतन, लेन-देन, संगति / संदर्भात्मक अखंडता, और स्थायित्व अत्यंत मूल्यवान हैं और इसे रोषपूर्वक माफ नहीं किया जाना चाहिए। डेटा अपूर्ण है, अगर यह अधूरा है, पुराना है, या गलत है, तो इसका कोई मतलब नहीं है। जब आपके पास ACID एक व्यावसायिक आवश्यकता के रूप में है, लेकिन डेटाबेस तकनीक का उपयोग कर रहे हैं जो इसे बॉक्स से बाहर की पेशकश नहीं कर सकते हैं (उदाहरण के लिए कई NoSQL डेटाबेस, या DB-per-microservice वास्तुकला), तो आपके आवेदन को अंतर भरना होगा और उन गारंटियों को प्रदान करना होगा।

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

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

  • वितरित सिस्टम भी विकास का एक बड़ा प्रयास है। कुछ हद तक, बीफ़ियर हार्डवेयर पर विकास लागत या पैसा छोड़ने के बीच सीधा व्यापार बंद है।

उदाहरण: झूलते संदर्भ

व्यवहार में, आपको कंप्यूटर विज्ञान को नहीं बल्कि अपने व्यावसायिक आवश्यकताओं को देखना चाहिए कि क्या और कैसे ACID को आराम दिया जा सकता है। उदाहरण के लिए, कई विदेशी-कुंजी रिश्ते उतने महत्वपूर्ण नहीं हो सकते हैं जितने वे लगते हैं। एक उत्पाद पर विचार करें - श्रेणी n: m संबंध। RDBMS में हम एक विदेशी-कुंजी बाधा का उपयोग कर सकते हैं ताकि केवल मौजूदा उत्पाद और मौजूदा श्रेणियां उस रिश्ते का हिस्सा बन सकें। यदि हम अलग-अलग उत्पाद और श्रेणी सेवाएँ पेश करते हैं, और एक उत्पाद या श्रेणी हटा दी जाती है तो क्या होता है?

इस मामले में, यह एक बड़ी समस्या नहीं हो सकती है और हम अपना आवेदन लिख सकते हैं ताकि यह किसी भी उत्पाद या श्रेणियों को फ़िल्टर कर दे जो अब मौजूद नहीं है। लेकिन वहाँ व्यापार कर रहे हैं!

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

  • यह पेजिंग के साथ गड़बड़ कर सकता है। उदाहरण के लिए, आप एक श्रेणी से अगले 25 उत्पादों का अनुरोध करते हैं, और उस प्रतिक्रिया से अनुपलब्ध उत्पादों को फ़िल्टर करते हैं। अब आपका आवेदन 23 उत्पादों को प्रदर्शित करता है। सिद्धांत रूप में, शून्य उत्पादों वाला एक पृष्ठ भी संभव होगा!

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

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

उदाहरण: समवर्ती आदेश

अब इसके बजाय एक उत्पाद पर विचार - आदेश संबंध। यदि कोई उत्पाद हटा दिया जाता है या बदल जाता है, तो ऑर्डर का क्या होता है? ठीक है, हम बस इसे उपलब्ध रखने के लिए ऑर्डर एंट्री में संबंधित उत्पाद डेटा की प्रतिलिपि बना सकते हैं - सादगी के लिए ट्रेडिंग डिस्क स्थान। लेकिन क्या होगा यदि उत्पाद की कीमत बदल जाए या उत्पाद उस उत्पाद के लिए ऑर्डर से ठीक पहले अनुपलब्ध हो जाए? एक वितरित प्रणाली में, प्रभावों को प्रचार करने में समय लगता है और आदेश संभवतः पुराने डेटा के माध्यम से जाएगा।

फिर, यह कैसे दृष्टिकोण करना है यह आपकी व्यावसायिक आवश्यकताओं पर निर्भर करता है। हो सकता है कि पुराना आदेश स्वीकार्य हो और आप बाद में उस आदेश को रद्द कर सकते हैं यदि वह पूरा नहीं किया जा सकता।

लेकिन शायद यह एक विकल्प नहीं है, जैसे अत्यधिक समवर्ती सेटिंग्स के लिए। पहले 10 सेकंड के भीतर कॉन्सर्ट टिकट खरीदने के लिए 3000 लोगों की भीड़ पर विचार करें, और मान लें कि उपलब्धता में बदलाव के लिए प्रचार करने के लिए 10ms की आवश्यकता होगी। कई लोगों को आखिरी टिकट बेचने की संभावना क्या है? इस बात पर निर्भर करता है कि उन टकरावों को कैसे संभाला जाता है, लेकिन λ = 3000 / (10s / 10ms) = 3हमारे साथ एक पॉइसन वितरण का उपयोग करके P(k > 1) = 1 - P(k = 0) - P(k = 1) = 80%प्रति 10ms अंतराल पर टक्कर का मौका मिलता है । चाहे बेचना और बाद में आपके अधिकांश आदेशों को रद्द करना संभव हो, बिना धोखाधड़ी किए आपके कानूनी विभाग के साथ एक दिलचस्प बातचीत हो सकती है।

व्यावहारिकता का अर्थ है, सबसे अच्छी विशेषताएं चेरी-पिकिंग।

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

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

आप बिना microservices के पैमाने कर सकते हैं।

माइक्रोसर्विस के दो प्रमुख लाभ हैं:

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

यदि स्वतंत्र स्केलिंग की आवश्यकता नहीं है, तो माइक्रोसॉर्क्स बहुत कम आकर्षक हैं।

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

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

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

क्या आपके पास एक मजबूत व्यवसाय मामला है?

आप अपने संगठन की व्यावसायिक आवश्यकताओं से अवगत हैं, और इसलिए विश्लेषण के आधार पर डेटाबेस-प्रति-माइक्रो-आर्किटेक्चर के लिए एक तर्क बना सकते हैं:

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

इसके विपरीत, यदि आप इसे प्रदर्शित करने में असमर्थ हैं, विशेष रूप से यदि वर्तमान डेटाबेस डिजाइन भविष्य में पर्याप्त पैमाने का समर्थन करने में सक्षम है (जैसा कि आपके सहकर्मियों का मानना ​​है), तो आपके पास भी आपका जवाब है।

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


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

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

0

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


-1

आपका रुख प्रशंसनीय और सही है।

हालांकि ऊन डीबी नशेड़ी में कैसे रंगे जाने के लिए एक और सवाल है। मैं कहूंगा कि आपके पास दो विकल्प हैं।

  1. एक ठोस उदाहरण खोजें जहाँ DB अपनी सीमा तक पहुँच गया है। क्या आपके पास उदाहरण के लिए 'संग्रह सारणी' है? क्यों ठीक है? आपके द्वारा प्रति सेकंड लिए जाने वाले ऑर्डर की अधिकतम संख्या क्या है? आदि दिखाएँ कि DB आवश्यकताओं को पूरा नहीं करता है और आपका समाधान उन्हें ठीक करता है।

  2. महंगा ठेकेदारों को बताएं कि आप सबसे अच्छा समाधान बताएं। क्योंकि वे खर्च कर रहे हैं और ब्लॉग है हर कोई उन पर विश्वास करेगा


1
मैं -1 नहीं हूं, लेकिन इसके लिए एक अच्छा उत्तर होना चाहिए मैं बिंदु 2 के स्नार्क को खो दूंगा और इस पर विस्तार करूंगा कि कब कई डेटाबेस की आवश्यकता होगी। मुझे नहीं लगता कि संग्रह सारणी जरूरी डेटाबेस में एक एंटीपैटर्न है जो विभाजन का समर्थन नहीं करता है। वर्तमान में मैं जिस डेटाबेस का उपयोग कर रहा हूं, उसमें 26 टेबल्स> 10M पंक्तियों के साथ लगभग 130GB डेटा है और डेटाबेस को विभाजित करने की आवश्यकता के लिए प्रदर्शन दूरस्थ रूप से पर्याप्त नहीं है; इसलिए मैं अत्यधिक उलझन में हूं और मैं सुनना चाहता हूं कि यह एक अच्छा विचार क्यों है, और जब इसे करने की आवश्यकता होती है - यह उत्तर निकटतम है जिसे मैंने अब तक देखा है।
mcottle

कुंआ। मैं संग्रह सारणी का उल्लेख करता हूं क्योंकि वे एफके बाधाओं को दूर करते हैं। कवच में इसकी एक झंकार। microservice द्वारा विभाजन db चीज़ के आकार का नहीं है, यह आपके माइक्रोसर्विस को अलग रखने वाली चीज़ है। यदि आप एक को बंद नहीं कर सकते हैं और इसे दूर फेंक सकते हैं, तो यह वास्तव में एक माइक्रोसेवा नहीं है। पुनः बिंदु 2. ओपी एमएफ का उल्लेख करते हैं, वे सचमुच उसे आने के लिए / विचार करने के लिए किराया दे सकते हैं और डीबी को विभाजित करने के लिए कह सकते हैं
इवान

"अगर आप एक को बंद नहीं कर सकते हैं और इसे फेंक सकते हैं, तो यह वास्तव में एक माइक्रोसेवा नहीं है।" यह स्वयं सेवा के बारे में सच है, लेकिन जरूरी नहीं कि इस तर्क के लिए कि सेवा को स्वयं के डेटाबेस की आवश्यकता क्यों है। अंततः, डेटाबेस स्वयं एक सेवा है जिसका उपयोग माइक्रोसैस सर्विस द्वारा किया जा रहा है। Microservice वास्तव में यह नहीं जानता या परवाह नहीं करता है कि इसका उपयोग करने वाला डेटा एक अलग डेटाबेस या साझा डेटाबेस में है या नहीं। आप इस microservice की प्रतियां नीचे या नीचे स्पिन कर सकते हैं और वास्तव में कुछ भी नहीं बदलता है।
क्रिस प्रात

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