माइक्रोसॉफ़्ट आर्किटेक्चर ने डोमेन मॉडल साझा किए


12

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


1
जब भी संभव हो, सत्य का एक ही स्रोत होना हमेशा बेहतर होता है।
रॉबर्ट हार्वे

@RobertHarvey यह पॉलीग्लॉट दृढ़ता को कैसे प्रभावित करेगा? क्या सभी डोमेन ऑब्जेक्ट के लिए एक साझा लाइब्रेरी का उपयोग करना अभी भी इसका मतलब होगा कि प्रत्येक माइक्रोसेवा का अपना डेटाबेस हो सकता है?
user1176999

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

जवाबों:


12

यदि आपने स्केलेबिलिटी, ढीले कपलिंग, और प्रत्येक सेवा के आसान स्वतंत्र संशोधन से लाभ के लिए माइक्रोसर्विस के लिए किया था, तो आपको इसे अधिकतम संभव सीमा तक चिपका देना चाहिए।

कुल मिलाकर वास्तुकला

मुझे लगता है कि सबसे अच्छा तरीका होगा:

  • सामान्य उपयोगकर्ता सूचना प्रबंधन के लिए एक माइक्रो-सेवा है;
  • प्रत्येक microservice (सामान्य आईडी के रेफ़रिन का उपयोग करके) विशिष्ट उपयोगकर्ता जानकारी (जैसे प्रोफाइल, प्राधिकरण, प्राथमिकताएं) रखें

अतिरिक्त पढ़ने:

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

कोड को बांटना

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

  • लचीले और अलग रिलीज साइकिल की अनुमति के लिए मजबूत जुदाई की हठधर्मिता के बाद, उपभोक्ता कोड को सुदृढ़ करने के लिए या तो प्रत्येक माइक्रोसिस्ट सेवा,
  • या लाइब्रेरी के हिस्से के रूप में उपभोक्ता कोड साझा करने के लिए, यह देखते हुए कि यह मूलभूत जानकारी "चेसिस" इंफ्रास्ट्रक्चर पैटर्न का विस्तार है

मैं उस पर स्पष्ट कटौती की स्थिति नहीं लूंगा, क्योंकि इस कोड साझा करने के विषय पर ओपिनिटेड ओपिनियन वॉर हैं, और मुझे नहीं लगता कि मैं ऑब्जेक्टिव पोजिशन लेने की स्थिति में हूं। यहाँ पहले से ही कुछ अतिरिक्त पढ़ना है:

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

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

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

1

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

आपकी सेवा कुछ अन्य एक उपयोगकर्ता के बारे में विवरण की जरूरत है, कुछ सुझाव पर एक नजर है यहाँ कैसे ऐसी स्थितियों को संभालने के लिए के बारे में

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