विभिन्न माइक्रोसर्विसेज के बीच साझा डोमेन मॉडल


61

दो अलग-अलग माइक्रोसर्विसेज के परिदृश्य की कल्पना करें। एक सेवा के भीतर प्रमाणीकरण को संभालने के लिए, दूसरा उपयोगकर्ता प्रबंधन का ध्यान रखता है। वे दोनों एक उपयोगकर्ता की अवधारणा है, और एक दूसरे को कॉल के माध्यम से उपयोगकर्ताओं के बारे में बात करेंगे।

हालांकि एक "उपयोगकर्ता" का डोमेन मॉडल कहां होगा? क्या वे दोनों डेटाबेस के स्तर पर एक उपयोगकर्ता का एक अलग प्रतिनिधित्व करेंगे? जब हमारे पास API कॉल में उपयोग होने वाला उपयोगकर्ताDTO होता है, तो क्या वे दोनों अपने संबंधित API के लिए एक होंगे?

इस तरह के वास्तु मुद्दे के लिए सामान्य स्वीकृत समाधान क्या है?

जवाबों:


36

माइक्रोसर्विस आर्किटेक्चर में, प्रत्येक व्यक्ति दूसरों से बिल्कुल स्वतंत्र है और उसे आंतरिक कार्यान्वयन के विवरण को छिपाना होगा।

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

यदि वे बहुत संबंधित हैं तो शायद वे वास्तव में एक हैं जैसे @soru कहते हैं।

संबंधित सवाल:


21
मैं पूरी तरह से सहमत नहीं हो सकता, अगर वे पूरी तरह से स्वतंत्र हैं तो आपके पास 2 मोनोलिथ हैं। विचार स्मार्ट एंडपॉइंट और डंब पाइप है। उद्यम के संदर्भ में, आप अंत में (वर्तमान में मेरी दुःस्वप्न) दीवार से टकराना चाहते हैं क्योंकि एक अंतर्निहित सामान्य डोमेन मॉडल है, (निहित है क्योंकि हमने इसे पूर्वाभास नहीं किया था) और प्रत्येक सेवा पहिया का एक% सुदृढ़ कर रही है। और माइक्रो-सेवाओं का पारिस्थितिकी तंत्र फ़ोकस के साथ बढ़ रहा है, जो कार्यक्षमता और टीम के स्वामित्व में 100% है, इसे डोमेन मॉडल के साथ गड़बड़ कर रहा है। हमारे पास नई सेवाएं बनाने वाली टीमें हैं, जो दूसरों का उपभोग करते हैं, बहुत प्रयास करते हैं। अभी भी अनसुलझी है।
जुआनम्फ

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

3
साथ ही, डोमेन मॉडल की सामान्य समझ नहीं होने के कारण, टीमों ने मॉडल को माइक्रो-सर्विस प्रतिक्रियाओं को अपनाने के लिए अनावश्यक "अनमरस्लिंग + ऑब्जेक्ट-ऑब्जेक्ट ट्रांसफॉर्मेशन" को लागू करने का कारण बनाया, जिसे कॉलिंग माइक्रो-सर्विस ने अपनाया। मुझे पता है कि एक सामान्य डोमेन मॉडल के लिए सभी सेवाओं को युग्मित करना अन्य परिचालन मुद्दों को ला सकता है, लेकिन मुझे न तो विकल्प संतोषजनक लगता है।
जुआनम्फ

3
यदि आप अपने मुद्दों के बारे में एक प्रश्न पोस्ट कर सकते हैं तो @juanmf यह बहुत मूल्यवान होगा। मुझे इस मामले पर राय सुनने में भी दिलचस्पी है ...
मिलोस मर्डोविक

1
मैं बैठने और कुछ लिखने की कोशिश करता हूँ जो समझ में आता है
juanmf

13

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

निश्चित रूप से उदाहरण दो सेवाओं के रूप में बहुत कम समझ में आता है; 'उपयोगकर्ता प्रबंधन' के लिए एक विनिर्देश की कल्पना करना कठिन है, इसलिए यह पूरी टीम को इतना व्यस्त रखेगा कि उसके पास प्रमाणीकरण करने के लिए समय न हो।

यदि किसी कारण से वे थे, तो वे यह इस्तेमाल करते हुए संवाद करेंगे कि मूल रूप से मनमाने तार क्या हैं, जैसे कि OAuth 2.0 में


4

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

याद रखें कि एक डोमेन मॉडल एक वास्तविक दुनिया "चीज" को मॉडल करने की कोशिश नहीं करता है, लेकिन वह चीज किसी विशेष संदर्भ (जैसे कि पहचान / प्राधिकरण प्रबंधन, या मानव संसाधन, आदि) में क्या है।


2

वे दोनों एक उपयोगकर्ता की अवधारणा है, और एक दूसरे को कॉल के माध्यम से उपयोगकर्ताओं के बारे में बात करेंगे।

मैं @soru की कही गई बातों से भी सहमत हूं। यदि एक सेवा को किसी अन्य सेवा के डेटा की आवश्यकता होती है, तो उनकी सीमाएँ गलत हैं।

एक अच्छा समाधान वह है जो @pnschofield के साथ आया था - अपनी सेवाओं को बाउंडेड संदर्भ के रूप में मानते हुए।

विषय के बारे में बात करते हुए, शीघ्र ही डाल दिया: साझा किए गए डोमेन मॉडल सेवा स्वायत्तता को मारते हैं, अपने माइक्रोसॉर्स्ट सिस्टम को वितरित मोनोलिथ में बदलते हैं। जो जाहिरा तौर पर एक मोनोलिथ से भी बदतर है।

इसलिए अभी भी एक सामान्य सवाल अनसुलझा है - सेवा या संदर्भ सीमाओं को कैसे परिभाषित किया जाए, ताकि वे उच्च सामंजस्य और ढीली युग्मन अच्छाई में पनपे।

मैं अपने संदर्भों को व्यवसाय-क्षमता के रूप में मानने के लिए एक समाधान के साथ आया था। यह एक उच्च-स्तरीय व्यवसाय-जिम्मेदारी, व्यवसाय-कार्यक्षमता है, जो समग्र व्यवसाय-लक्ष्य में योगदान देता है। आप उनके बारे में सोच सकते हैं, क्योंकि आपके संगठन को व्यवसाय-मूल्य प्राप्त करने के लिए चलने की जरूरत है।

सेवा सीमाओं की पहचान करते समय मेरे द्वारा उठाए गए चरणों का मेरा विशिष्ट क्रम निम्नलिखित है:

  1. उच्च-स्तरीय व्यावसायिक-क्षमताओं को पहचानें। आमतौर पर वे एक ही डोमेन से संगठनों के बीच समान होते हैं। आप यह महसूस कर सकते हैं कि पोर्टर के मूल्य श्रृंखला मॉडल की जाँच करने पर यह कैसा दिखता है।
  2. प्रत्येक क्षमताओं के भीतर, गहराई से और उप-क्षमताओं की पहचान करें।
  3. क्षमताओं के बीच संचार पर ध्यान दें। एक संगठन क्या करता है यह देखो। आमतौर पर, संचार क्षमताओं के भीतर केंद्रित होता है, बाकी को उसके काम के परिणाम के बारे में सूचित करता है। तो तकनीकी वास्तुकला को लागू करते समय, आपकी सेवा को घटनाओं के माध्यम से भी संवाद करना चाहिए। इसके कई सकारात्मक परिणाम हैं। इस दृष्टिकोण के साथ आपकी सेवाएं स्वायत्त और सामंजस्यपूर्ण हैं। उन्हें समकालिक संचार और वितरित लेनदेन की आवश्यकता नहीं है।

संभवतः इस तकनीक का एक उदाहरण आपके लिए कुछ हितकारी होगा। मुझे यह बताने में संकोच न करें कि आप इसके बारे में क्या सोचते हैं, क्योंकि मैंने इस दृष्टिकोण को वास्तव में लाभदायक पाया है। यकीन है कि यह आपके लिए भी काम कर सकता है।


1

माइक्रोसॉर्स्ट "शेयर नथिंग" के बारे में नहीं है, लेकिन "जितना संभव हो उतना कम साझा करें"। ज्यादातर मामलों में "उपयोगकर्ता" वास्तव में सामान्य इकाई है (सिर्फ इसलिए कि उपयोगकर्ता को कुछ साझा पहचानकर्ता - userId / ईमेल / फोन द्वारा पहचाना जाता है)। इस तरह की इकाइयाँ परिभाषा द्वारा साझा की जाती हैं। उपयोगकर्ता मॉडल दायरे से बाहर है एक microservice। इसलिए आपके पास कुछ वैश्विक स्कीमा होनी चाहिए, जहां उपयोगकर्ता (केवल उनके सबसे सामान्य क्षेत्र) को रखा जाना चाहिए। सख्त मामले में केवल आईडी है।

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