व्यावसायिक तर्क को माइक्रोसेस्टर आर्किटेक्चर में कहां बैठना चाहिए?


12

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

मान लीजिए कि हम एक अत्यंत सरलीकृत उबेर बुकिंग प्रणाली बनाने की कोशिश करते हैं । : चीजें आसान बनाने के लिए हम मान लें कि हम 3 सेवाओं और ग्राहक के लिए एक प्रवेश द्वार एपीआई डालते हैं Booking, Drivers, Notificationऔर हम निम्न कार्यप्रवाह है:

नई बुकिंग बनाते समय:

  1. जांचें कि क्या मौजूदा उपयोगकर्ता के पास पहले से बुकिंग है
  2. उपलब्ध ड्राइवरों की सूची प्राप्त करें
  3. बुकिंग लेने के लिए ड्राइवरों को सूचना भेजें
  4. ड्राइवर ने बुकिंग की

बता दें कि सभी मैसेजिंग चीजों को सरल रखने के लिए काफ्का जैसी मैसेजिंग बस के बजाय एक HTTP कॉल के जरिए की जाती है।

तो इस मामले में, मैंने सोचा कि Bookingसेवा मौजूदा बुकिंग के लिए जाँच कर सकती है। लेकिन फिर उपलब्ध ड्राइवरों और अधिसूचना की सूची किसे प्राप्त होनी चाहिए? मैं इसे गेटवे स्तर पर करने की सोच रहा हूं, लेकिन अब तर्क दो स्थानों में विभाजित है:

  • Gateway - उपलब्ध ड्राइवरों की सूची प्राप्त करें + सूचनाएं भेजें
  • Booking - मौजूदा बुकिंग के लिए जाँच करें

और मुझे पूरा यकीन है कि यह करने के लिए प्रवेश द्वार सही जगह नहीं है, लेकिन मुझे ऐसा लगता है कि अगर हम इसे Bookingसेवा में कर रहे हैं , तो यह बहुत तंग हो रहा है?

इसे और अधिक जटिल बनाने के लिए, यदि हमारे पास कोई अन्य प्रोजेक्ट है जो बुकिंग सिस्टम का पुन: उपयोग करना चाहता है, लेकिन इसके शीर्ष पर अपने स्वयं के व्यावसायिक तर्क के साथ क्या होता है? इसलिए मैंने इसे गेटवे स्तर पर करने के बारे में सोचा, इसलिए नए प्रोजेक्ट गेटवे का अपना व्यावसायिक तर्क मौजूदा से अलग हो सकता है।

ऐसा करने का एक और तरीका मुझे लगता है कि प्रत्येक परियोजना की अपनी बुकिंग सेवा है जो कोर बुकिंग सेवा से बात करेगी लेकिन मुझे यकीन नहीं है कि यहां सबसे अच्छा तरीका क्या है :-)


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

जवाबों:


14

लोग अक्सर "सूक्ष्म सेवा" सुनते हैं और "नैनो-सेवा" सोचते हैं, और यह कुछ भ्रम पैदा कर सकता है। ये माइक्रो सर्वर हैं, इसलिए आपको हर एक इकाई के लिए एक अलग सेवा की आवश्यकता नहीं है। आप जो कुछ करने की कोशिश कर रहे हैं वह सेवाओं bookingऔर notificationसेवाओं में होना चाहिए । आपको driverसेवा की आवश्यकता नहीं है (आपके द्वारा बताई गई किसी भी गतिविधि के लिए)।

पुस्तक के लिए उपलब्ध ड्राइवरों की सूची प्राप्त करना bookingसेवा के अंतर्गत आता है । एक सामान्य नुकसान यह है कि एक ही सेवा में समूह से संबंधित गतिविधियों को नहीं करना है, इसे कम-सुसंगतता कहा जाता है, और यह बहुत बुरा है। याद रखें, आप समस्या को डोमेन द्वारा सेवा में समूह बनाते हैं, इकाई द्वारा नहीं।

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

एक विशिष्ट बुकिंग प्रवाह इस तरह दिखेगा:

  1. Android एप्लिकेशन bookingउपलब्ध ड्राइवरों की सूची प्राप्त करने के लिए सेवा को कॉल करता है
  2. बुकिंग सेवा ऐप में ड्राइवरों की सूची लौटाती है
  3. उपयोगकर्ता तब अपने ड्राइवर का चयन करता है और ऐप bookingसेवा की "पुस्तक" विधि कहता है
  4. bookingसेवा सेवा कॉल notificationबुकिंग विवरण के साथ सेवा
  5. notificationसेवा ड्राइवर के लिए एक सूचना भेजता है, उसे बुकिंग के बारे में सूचित करने
  6. ड्राइवर ऐप notificationग्राहक के एक मील के भीतर सेवा को संदेश भेजता है
  7. notificationसेवा ग्राहकों के लिए सूचना भेजता है कि उनके चालक लगभग वहाँ है

आशा है कि इससे मदद मिली; याद रखें, वे सूक्ष्म सेवाएँ हैं, नैनो-सेवाएँ नहीं, उसी समस्या डोमेन को विभाजित करने का प्रयास न करें। इसलिए, अपने प्रश्न के शीर्षक का उत्तर देने के लिए, जब आप एक माइक्रो-सर्विस को उचित आकार, सभी या अधिकांश, उस समस्या डोमेन के लिए व्यावसायिक तर्क उस सूक्ष्म-सेवा के भीतर रह सकते हैं।


1

यह सब आपकी सटीक आवश्यकता पर निर्भर करता है।

मान लीजिए कि आपके पास बुकिंग करने वाले दो एप्लिकेशन हैं:

  1. पहला मामला: एक एप्लिकेशन एक उपयोगकर्ता को कई बार बुक करने की अनुमति दे सकता है, दूसरा केवल लोगों को अनुमति देता है। इसका मतलब यह है कि बुकिंग का प्रतिबंध आवेदन स्तर पर है, जैसे कि या तो आपके बुकिंग सिस्टम में दो प्रवेश बिंदु हैं (एक जो बहु बुकिंग की अनुमति देता है, एक जो ऐसा नहीं करता है) या आप सिर्फ यह देखते हैं कि संबंधित के माइक्रोसेवा में आवेदन।
  2. दूसरा मामला: यह एक "बुकिंग" की परिभाषा का हिस्सा है, जो उपयोगकर्ता के पास कोई भी नहीं हो सकता है जो भी अनुप्रयोग है, यह नियम पूरे सिस्टम के लिए सही है: इसका मतलब है कि आप चेक को माइक्रोफ़ोन सेवा में डाल सकते हैं।

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

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


0

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

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

यह जरूरी नहीं है कि यह सभी परिदृश्यों में सबसे अच्छा तरीका है, लेकिन इस तरह से चीजों को बनाने के कई फायदे हैं, खासकर ऐसे परिदृश्यों में पुन: प्रयोज्य जो वर्तमान में ज्ञात नहीं हैं।

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