शिथिल युग्मित माइक्रोसिस्टम्स आर्किटेक्चर में, आप अपनी निर्भरता पर कैसे नज़र रखते हैं?


9

आधुनिक कार्यक्रम में एक लोकप्रिय उच्च स्तरीय वास्तुकला पसंद एक REST- आधारित माइक्रोसर्विस सिस्टम है। इसके कई फायदे हैं जैसे ढीली युग्मन, आसान पुन: उपयोग, प्रौद्योगिकियों पर सीमित प्रतिबंध जो कि उपयोग किए जा सकते हैं, उच्च मापनीयता, आदि।

लेकिन इस तरह के आर्किटेक्चर में मुझे जो समस्याएँ आती हैं उनमें से एक समस्या यह है कि किसी अनुप्रयोग की निर्भरता क्या है, इसकी खराब दृश्यता है। उदाहरण के लिए, मान लें कि मेरे पास एक एप्लिकेशन है जो दैनिक आधार पर REST कॉल के एक सेट का उपयोग करता है। यह एप्लिकेशन REST कॉल के दूसरे सेट का भी उपयोग करता है, लेकिन केवल एक तिमाही में। यदि मैं पिछले सप्ताह के लिए लॉग को स्कैन करने के लिए था, तो मैं सभी दैनिक कॉल्स देखूंगा, लेकिन मैं संभवतः तिमाही कॉल नहीं देखूंगा। जब रिफ्लेक्टर का समय आता है, तो त्रैमासिक कॉल के टूटने का उच्च जोखिम होता है।

इस जोखिम को कम करने के लिए कौन से पैटर्न या टूल का उपयोग किया जा सकता है और एक ढीले कपल आर्किटेक्चर की निर्भरता क्या है?


1
यही कारण है कि ढीली युग्मन खराब हो सकता है। जब कोई संकलन समय निर्भरता नहीं होती है, तो त्रुटियों का पता लगाने का एकमात्र तरीका है, और आप उन सभी को कभी नहीं पकड़ते हैं, स्वचालित परीक्षण का उपयोग कर रहे हैं। समाधान कुछ प्रकार का स्वचालित परीक्षण है, जिसमें संभवतः इकाई परीक्षण के साथ-साथ एकीकरण परीक्षण भी शामिल है।
फ्रैंक हिलमैन

@FrankHileman परीक्षण स्पष्ट रूप से मदद करता है, लेकिन मुझे यह विश्वास करना मुश्किल है कि यह एकमात्र समाधान है। इसके अलावा ऐसी कई भाषाएं हैं, जिनके संकलन-समय की जांच (यानी JS या अजगर) नहीं है, इसलिए यहां तक ​​कि तंग युग्मन के साथ भी आपके पास अभी भी मुद्दे होंगे।
डेविड कहते हैं, मोनिका

1
स्टैटिक प्रकार सिस्टम संकलन चरण के दौरान बड़ी संख्या में त्रुटियों को पकड़ सकता है। ऐसी प्रणाली की कमी के लिए एकमात्र मुआवजा स्वचालित परीक्षण है, मेरे ज्ञान के लिए। स्वचालित प्रमाण के माध्यम से या बस संकलन के माध्यम से स्थैतिक त्रुटि का पता लगाना हमेशा परीक्षणों की तुलना में अधिक विश्वसनीय होगा।
फ्रैंक हिलमैन

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

@Laiv मैं विशेष रूप से Restful सेवाओं के बारे में उत्सुक हूं, इसलिए वास्तव में एक विकल्प नहीं है क्योंकि कोई भी HTTP अनुरोधों को कम या ज्यादा भेज सकता है।
डेविड का कहना है कि मोनिका

जवाबों:


4

इस जोखिम को कम करने के लिए कौन से पैटर्न या टूल का उपयोग किया जा सकता है

अपने एपीआई और अपनी व्यावसायिक क्षमताओं को पीछे की ओर संगत रखना।

एक शिथिल युग्मित वास्तुकला की निर्भरता क्या है में अधिक से अधिक दृश्यता प्रदान करते हैं

स्वास्थ्य की जाँच।

मेरी सेवा आपकी मासिक एपीआई क्षमता के लिए एक ग्राहक है। लेकिन जब भी मेरी सेवा चल रही है, मेरी सेवा आपके एपीआई का ग्राहक है। इसलिए मेरी सेवा हर 10 मिनट, या जो भी हो, आपके मासिक एपीआई से जुड़ती है, और यह सुनिश्चित करने के लिए प्रोटोकॉल चलाता है कि मेरी सेवा की क्षमता अभी भी उपलब्ध है।

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


1

कम से कम दो स्थान हैं जहां आप निर्भरता पा सकते हैं:

  • विन्यास। बाहरी एपीआई तक पहुँचने के लिए उन एपीआई में से प्रत्येक के बारे में जानकारी का एक गुच्छा जानना आवश्यक है। एक्सेस आईडी, गुप्त कुंजी, समापन बिंदु। यह सब कोड में नहीं हो सकता, क्योंकि ऐसी जानकारी बदल जाएगी । एक उदाहरण के रूप में, मैंने हाल ही में अपने सभी माइक्रोसर्विसेज को एसएसएल में माइग्रेट करना शुरू किया। इसका मतलब यह है कि हर सेवा जो माइग्रेट होने पर निर्भर करती है, उसके https://बजाय संस्करण को इंगित करने के लिए पुन: कॉन्फ़िगर किया जाना चाहिए http://। मुझे खुशी है कि एंडपॉइंट हार्डकॉस्ट होने के बजाय कॉन्फ़िगरेशन में थे।

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

जब रिफ्लेक्टर का समय आता है, तो त्रैमासिक कॉल के टूटने का उच्च जोखिम होता है।

यह वही है जो प्रतिगमन परीक्षण के लिए है।

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


-2

REST API को शिथिल रूप से निर्दिष्ट किया गया है, इसलिए किसी बिंदु पर RPC इंटरफ़ेस को परिभाषित करने के लिए gRPC, google protobufs या Thrift पर जाना उपयोगी हो सकता है और फिर इसे संस्करणित कर सकता है।


2
यह एक टिप्पणी के रूप में बेहतर हो सकता है ... लेकिन ईमानदारी से यह ज्यादा व्याख्या नहीं करता है।
डेविड कहते हैं मोनिका

काफी उचित। बाकी API का किसी अन्य सेवा पर कोई विशिष्ट संकलन समय निर्भरता नहीं है क्योंकि दोनों के बीच लिंक सिर्फ एक HTTP रेस्ट कॉल है, कुछ होस्ट और पथ की तरह। जीआरपीसी, या प्रोटोबॉफ या थ्रिफ्ट के साथ, एक इंटरफ़ेस परिभाषित किया गया है जिसका उपयोग कोड उत्पन्न करने के लिए किया जाता है। उत्पन्न कोड संकलित है, और संस्करणित किया गया है, और फिर आपकी सेवा (ओं) को उन इंटरफेस के खिलाफ बनाया गया है। परिणाम यह है कि प्रत्येक सेवा स्पष्ट रूप से आपके एक या अधिक सेवा इंटरफेस पर निर्भर है। आशा है कि मेरे जवाब को स्पष्ट करता है!
पैट्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.