आप एक microservice वास्तुकला में साझा अवधारणाओं को कैसे संभालते हैं?


39

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

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

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

जवाबों:


34

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

आपके उपयोग के मामले में, आपको बाहर से शुरू करना चाहिए और सोचना चाहिए कि आप एपीआई के माध्यम से अपने उपयोगकर्ता को कौन से ऑपरेशन उपलब्ध कराना चाहते हैं (यदि यह बैकएंड सेवा है) या यह वेब अनुप्रयोग होने पर जीयूआई में क्या संचालन उपलब्ध होना चाहिए। ध्यान दें कि GUI भाग अक्सर अपने स्वयं के नियंत्रकों के साथ एक नियमित अनुप्रयोग होता है: ऑपरेशन को REST (जैसे AngularJS) के माध्यम से कॉल किया जा सकता है, लेकिन ये समापन बिंदु केवल GUI अनुप्रयोग के उपयोग के लिए हैं और सामान्य अर्थों में microservices नहीं हैं।

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


1
इससे मुझे बहुत फायदा हुआ। मैंने यूआई उपयोग मामलों के एक जोड़े को लिखकर शुरू किया जो स्टैक का अभ्यास करेगा और सब कुछ ज्यादातर जगह गिर गया।
अंजुलत

1
इस विशेष उदाहरण में, क्या हम ऐसा करने वाले हैं। यदि हमारी सूची में 10 फ़ोटो हैं, तो उपयोगकर्ता डेटा प्राप्त करने के लिए उपयोगकर्ता सेवा में 10 कॉल? क्या यह ओवरहेड का एक बहुत कुछ नहीं जोड़ेगा?
रिकार्डो सूजा

1
@ आर्कमाक आप एक REST समापन बिंदु जोड़ सकते हैं जो इनपुट के रूप में कई आईडी की सूची प्राप्त करता है और आउटपुट के रूप में कई फोटो लौटाता है। यह अक्सर प्रदर्शन कारणों के लिए अभ्यास में किया जाता है। कभी-कभी, एपीआई डिजाइन शुद्धता और व्यावहारिक विचारों के बीच एक समझौता है।
मिशैल कोस्मुल्स्की

@ MichałKosmulski मुझे चर्चा शुरू करने की आवश्यकता है, लेकिन StackExchange डिजाइन उन्हें हतोत्साहित करते हैं :) मुझे इस विशिष्ट उदाहरण में microservice दृष्टिकोण के बारे में क्या पसंद नहीं है कि अंतर्निहित डेटाबेस (जहां उपयोगकर्ता और चित्र संग्रहीत हैं) के लिए प्रत्यक्ष क्वेरी बहुत अधिक कुशल हो सकती है। कल्पना कीजिए कि ये अपस्ट्रीम सेवाएं अन्य अपस्ट्रीम सेवाओं और इतने पर निर्भर हैं। डेटा स्टोर में सीधी क्वेरी ज्यादा सुरक्षित है। सिर्फ मेरे 5 सेंट - अधिक कुछ नहीं। फिर से मैं वास्तव में इस विषय पर उत्पादक चर्चा करना चाहता हूं, लेकिन इसके लिए StackExachange अच्छी जगह नहीं है (क्या आप microservices चर्चा मंचों की सिफारिश कर सकते हैं?)
ajukraine

@ajukraine मुझे लगता है कि स्टैकएक्सचेंज पर चैट होती हैं जो चर्चाओं के लिए एक अच्छी जगह हो सकती है। जैसा कि प्रदर्शन के लिए: 1. माइक्रोसॉफ़्ट एक प्रदर्शन लागत के साथ आते हैं, और 2. माइक्रोसॉर्क्स कुछ परिस्थितियों के लिए अच्छे होते हैं लेकिन दूसरों के लिए नहीं। निर्भरता के लिए: माइक्रोसर्विस आर्कोटेक्टर्स में आप अक्सर डेटा की स्थानीय प्रतियां बनाते हैं और निर्भरता की संख्या को कम करने के लिए अतुल्यकालिक संदेश का उपयोग करते हैं। यह एक वास्तविक वास्तुकला परिवर्तन है, न कि स्वचालित रूप से किसी एप्लिकेशन के प्रत्येक मॉड्यूल को एक अलग एप्लिकेशन में बदलना।
माइकल कोस्मुलस्की

4

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

ठीक है, प्रोफ़ाइल सेवा उपयोगकर्ता ऑब्जेक्ट के साथ काम नहीं करना चाहिए। यह केवल उस उपयोगकर्ता की आईडी को जान सकता है जिसके लिए उसे डेटा वापस करने के लिए कहा जाता है, और नहीं। इस तरह से आपको उपयोगकर्ता सेवा और प्रोफ़ाइल सेवा के बीच सहभागिता की आवश्यकता नहीं होगी।

यदि वह आपके प्रश्न का उत्तर नहीं देता है, तो क्या आप उस सटीक स्थिति का वर्णन करके उसे स्पष्ट कर सकते हैं जिससे आप निपट रहे हैं?


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

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