क्या माइक्रोसर्विसेज को एक दूसरे से बात करनी चाहिए?


30

मैं माइक्रो-सेवाओं का उपयोग करके एक एप्लिकेशन डिज़ाइन कर रहा हूं और कई सेवाओं से डेटा एकत्र करने के लिए सर्वोत्तम तंत्र पर अनिश्चित हूं।

मेरा मानना ​​है कि दो विकल्प हैं:

  • एक 'अंतर-सेवा' संचार तंत्र को एकीकृत करें जो सेवाओं को सीधे बात करने की अनुमति देता है। एपीआई गेटवे एक व्यक्तिगत सेवा को कॉल करेगा, जो एपीआई गेटवे के समेकित प्रतिक्रिया को वापस करने से पहले, डेटा एकत्र करने के लिए अन्य सेवाओं को कॉल करेगा। API तब कॉलर को प्रतिसाद देता है। (यह तब तुल्यकालिक कॉल करना होगा जब कॉल टू सर्विसबी को सर्विसए से प्रतिक्रिया की आवश्यकता होती है। आईई सेपरेट पर्सन एंड एड्रेस सर्विसेज।)
  • एपीआई गेटवे प्रत्येक सेवा को सीधे कॉल करें और प्रतिक्रिया लौटने से पहले एपीआई के भीतर डेटा को मजबूत करें।

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

  • एपीआई के कई सेवाओं के लिए कई कॉल निष्पादित करने से एपीआई सर्वर पर लोड बढ़ जाता है, खासकर जब उनमें से कुछ कॉल अवरुद्ध हो रहे हों।

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

मैं जानना चाहूंगा कि इस समस्या के लिए मानक दृष्टिकोण क्या है और अगर कोई दूसरा तीसरा विकल्प है जो मुझे याद आ रहा है?


क्या आप कुछ संदर्भ प्रदान कर सकते हैं? आपका ऐप क्या है और यह क्या करने की कोशिश कर रहा है
इवान

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

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

जवाबों:


21

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

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

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

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

अंतिम लेकिन कम से कम, अपनी सेवाओं को स्वायत्त (कम से कम तार्किक स्तर पर) रखने के लिए वह सब कुछ करने का प्रयास करें।

आशा है कि यह समझ में आता है।


11

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

लेकिन अगर आपको कुछ तर्क के लिए इसकी आवश्यकता है, तो संभावना है कि आप सेवा की सीमाएं गलत हैं।

कई विशेषताएं हैं जो सामान्य ज्ञान हमें बताती है कि हमारी सेवाओं के पास होना चाहिए । वो हैं:

  1. कम युग्मन। यदि आप सेवा A में कुछ बदलाव करते हैं, तो आप नहीं चाहते कि वे सेवा B को प्रभावित करें।
  2. उच्च सामंजस्य। यदि आपको कुछ सुविधा लागू करने की आवश्यकता है, तो आप चाहते हैं कि कम से कम संभव संख्या में सेवाएं प्रभावित हों।
  3. उच्च स्वायत्तता। यदि कुछ सेवा विफल हो जाती है, तो आप नहीं चाहते कि पूरा सिस्टम डाउन हो जाए।
  4. सही दानेदारता। आप नहीं चाहते हैं कि आपकी सेवाएं बहुत अधिक गंदी हों, क्योंकि आपका नेटवर्क आपके सोचने से कहीं अधिक जटिल चीज है।
  5. सेवाओं को घटनाओं के माध्यम से संवाद करना चाहिए। आप नहीं चाहते कि आपकी सेवा एक-दूसरे के बारे में जागरूक रहे क्योंकि यह स्थिरता को कम करता है। यदि आपको एक नई सेवा जोड़ने की आवश्यकता है, तो इसके बारे में सोचें।
  6. विकेंद्रीकृत डेटा। एक सेवा को जानकारी संग्रहीत करने के तरीके को साझा नहीं करना चाहिए। एक अच्छी वस्तु की तरह, यह व्यवहार को उजागर करता है, डेटा को नहीं।
  7. आर्केस्ट्रा पर सेवा कोरियोग्राफी।

इसे प्राप्त करने के लिए, अपनी सेवा सीमाओं को व्यवसाय-क्षमताओं के रूप में समझें । सेवा सीमाओं की पहचान करने की एक औपचारिक प्रक्रिया निम्न प्रकार है:

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

इस दृष्टिकोण को लागू करने का एक उदाहरण कुछ रुचि का हो सकता है।


1

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

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

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


0

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

क्या आप उस समस्या के बारे में अधिक व्याख्या करने में सक्षम हैं जिसे आप हल करने की कोशिश कर रहे हैं? सरल अंग्रेजी में?

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