माइक्रोसर्विस रेस्ट या एएमक्यूपी, जो मामला


16

मैंने माइक्रोसर्विस आर्किटेक्चर से संबंधित कई लेख पढ़े हैं और मैं सोच रहा था कि एएमक्यूपी या रीस्ट का उपयोग कब किया जाए।

मैंने पढ़ा है कि सेवाओं के बीच ढीली कपलिंग एक अच्छी बात है और एएमक्यूपी उस मामले में एक अच्छा विकल्प है। लेकिन अगर हम AMQP का उपयोग करते हैं, तो इसका मतलब है कि हमें अब REST अंतिम बिंदुओं की आवश्यकता नहीं है (लेकिन इसका मतलब है कि हम HATEOAS अवधारणा खो देते हैं)।

लेकिन क्या वास्तव में REST मेरी सेवाओं के निर्माण का एक अच्छा तरीका है? क्योंकि मैं किसी भी समापन बिंदु का उपयोग नहीं करूंगा ... किस मामले में एक दूसरे से बेहतर है?

मुझे एक या दूसरे का उपयोग कब करना चाहिए?

जवाबों:


10

REST को छोड़ने से, आप केवल HATEOAS से बहुत अधिक खो देते हैं। यदि आपकी माइक्रोसॉर्क्स सार्वजनिक हैं (और यह उनके लिए एक अच्छा विचार है कि सार्वजनिक होना चाहिए या कम से कम एक दिन सार्वजनिक होना चाहिए), तो REST और SOAP के अलावा किसी भी चीज़ का उपयोग समस्याग्रस्त होगा:

  • कुछ डेवलपर्स ने कभी भी एएमक्यूपी का इस्तेमाल नहीं किया,

  • कुछ ने AMQP का उपयोग किया है, लेकिन अक्सर REST और SOAP से अधिक परिचित हैं,

  • कुछ भाषाओं के लिए AMQP पुस्तकालय विशेष रूप से सीधे नहीं हैं,

  • सेवा के साथ मैनुअल प्रयोग बहुत सीमित है: मैं अमेज़न S3 के लिए किसी भी अनुरोध को करने के लिए CURL का उपयोग कर सकता हूं; अगर मुझे S3 के AMQP वेरिएंट के साथ खेलना है तो मुझे अपनी मशीन पर क्या स्थापित करना चाहिए ?

  • REST और SOAP को डीबग करना आसान है। मैं सिर्फ HTTP एक्सचेंजों को ट्रैक करता हूं और उनका विश्लेषण करता हूं। निश्चित नहीं है कि AMQP एक्सचेंजों को डीबग करने के लिए मुझे कौन से टूल का उपयोग करना चाहिए।

AMQP महान है, लेकिन यह घटनाओं के आधार पर एक्सचेंजों के एक बहुत ही विशिष्ट उद्देश्य के लिए किया जाता है। जबकि तकनीकी रूप से आरपीसी को एएमक्यूपी के साथ करना संभव है, यह इसका प्राथमिक उद्देश्य नहीं है।

अतुल्यकालिक पहलू भी महत्वपूर्ण है। कभी-कभी यह एक लाभ है: मैं सर्वरों के लिए अनुरोध करते समय किसी ऐप के उपयोगकर्ता इंटरफ़ेस को अवरुद्ध नहीं करना चाहता। कभी-कभी, यह सिर्फ उन चीज़ों को कठिन बना देता है जिनकी उन्हें आवश्यकता होती है: अगर मुझे अमेज़ॅन एस 3 से एक फ़ाइल बैकअप को पुनर्प्राप्त करने की आवश्यकता है, क्योंकि स्थानीय एक भ्रष्ट हो गया था, और फिर बैकअप को पुनर्स्थापित करें, तो मेरे बैच फ़ाइल को जारी रखने से पहले अपना काम पूरा करने के लिए CURL की आवश्यकता होती है, और एक तुल्यकालिक ऑपरेशन (एक विशिष्ट समय समाप्ति के साथ) सही अर्थों में करता है।

प्राथमिक कार्यों के लिए REST रखें:

  • एक उत्पाद प्राप्त करना,

  • चालान जमा करना,

और उन कार्यों के लिए AMQP का उपयोग करें जहां संदेश वास्तव में समझ में आता है:

  • सितंबर से सभी चालान संसाधित करना और रिपोर्ट दिखाए जाने के लिए तैयार होने पर एप्लिकेशन को सूचित करें (यह देखते हुए कि ऑपरेशन में आमतौर पर दो से दस मिनट लगते हैं,)

    यहाँ AMQP का लाभ इसका अतुल्यकालिक पहलू है। दस मिनट के लिए लंबित एक HTTP अनुरोध में टाइमआउट और अन्य मुद्दों को पैदा करने का एक अच्छा मौका है।

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

    एएमक्यूपी का लाभ यहां दूसरों के बीच, एप्लिकेशन को बदलने के बिना सब्सक्राइबर्स को जोड़ने की क्षमता है जो बैकअप ट्रैक करता है और एक भ्रष्ट होने पर अलर्ट को ट्रिगर करता है।


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


AMQP का उपयोग कर वस्तुओं के आधार पर लोड करने के बारे में क्या? बिलिंग सेवा से संबंधित उपयोगकर्ता की तरह (एक विशाल माइक्रोसेवा आर्किटेक्चर में), एसिंक्रोनसिटी वीएस रेस्ट हैटियस (सिंक्रोनस) एक्सेस के लिए स्ट्रेंथ?
थॉमस थोमस

5

दोनों का उपयोग करें।

बाकी शैली JSON वेब सेवाएं जावास्क्रिप्ट, ios आदि के साथ अंतर के लिए महान हैं

AMQP लंबे समय से चल रही प्रक्रियाओं, घटनाओं और माइक्रोसिस्टम्स के ऑर्केस्ट्रेशन के लिए बहुत अच्छा है।

लेकिन दोनों वास्तविक सेवा के लिए सिर्फ संचार आवरण हैं, आप एक ही सेवा को कई तरीकों से उजागर कर सकते हैं और शायद करना चाहिए।

AMPQ अच्छी तरह से काम कर सकता है Websockets पर उजागर, जो बहुत अच्छी तरह से देख सकते हैं एक REST समापन बिंदु की तरह यदि आप इस पर बैठते हैं।


1
"अगर आप इस पर व्यंग करते हैं" तो वह बहुत अच्छा था।
इयान डंकन

0

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

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


2
मैं सहमत नहीं हूं, जहां तक ​​मेरा सवाल है कि उनके पास क्रॉस उद्देश्य हैं; आप (आम तौर पर) सार्वजनिक इंटरनेट पर AMQP को उजागर नहीं करना चाहिए; इसमें एक चीज़ के लिए बहुत कम सुविधाएं हैं, और आमतौर पर सार्वजनिक इंटरनेट उपयोगकर्ता अपनी गतिविधियों से प्रतिक्रिया चाहते हैं। REST इस कारण से सार्वजनिक इंटरनेट उपयोग के लिए आदर्श रूप से अनुकूल है। हालांकि सबसे बड़ा अंतर यह है कि एएमक्यूपी एसिंक्रोनस है ( व्यवहार की तरह सिंक्रोनस संभव है, लेकिन यह एमक्यूएस के लिए क्या है), और आरईएसटी सिंक्रोनस है (हां लौटने 202से एसिंक्रोनसी तय हो रही है, लेकिन आपने रतन का उपयोग क्यों किया? शायद इसलिए क्योंकि यह सार्वजनिक है।)
जिमी होफा

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

@JimmyHoffa मुझे लगा कि वह पूछ रहा था कि अपने वेबसर्वर्स या क्लाइंट्स या जो कुछ भी अपने माइक्रोसेक्टर्स को हुक करने के लिए उपयोग करना है, वह वेब पर नहीं - इसलिए मेरा कहना है कि REST इसके लिए अच्छा है, लेकिन अगर आप जो भी इस्तेमाल कर रहे हैं वह आपके अधीन है। नियंत्रण, आप जो चाहें उपयोग कर सकते हैं।
gbjbaanb

हाँ, यह सुनिश्चित करने के लिए समझ में आता है; हालांकि मैंने उनके सवाल को अलग ढंग से पढ़ा: ऐसा लगता है कि उन्होंने माइक्रोसर्विस के विचार के बारे में पढ़ा है, और एएमक्यूपी बनाम रेस्ट को चुनने के लिए प्रासंगिक कारणों को नहीं समझते हैं। आंतरिक रूप से आप जो चाहें उपयोग कर सकते हैं, लेकिन AMQP बनाम REST का उपयोग आंतरिक रूप से करने के लिए अभी भी कुछ विशिष्ट कारण हैं; ऐसी सेवाएँ जो अतुल्यकालिक चाहती हैं, उन्हें आंतरिक रूप से AMQP का उपयोग करना चाहिए, ऐसी सेवाएँ जो तुल्यकालिक हैं (एक शुद्ध प्रसंस्करण सेवा के बारे में सोचें: रॉ डेटा इन -> प्रोसेस्ड डेटा आउट) रीस्ट होना चाहिए। आईपीसी टेक दोनों के लिए अलग-अलग फायदे और नुकसान हैं, आप उन्हें जानते हैं और उन्हें अपने उत्तर में सूचीबद्ध करना चाहिए! :)
जिमी हॉफ

0

AMQP बिंदु-से-बिंदु संचार का समर्थन करता है (उदाहरण के लिए, python-qpid-protonट्यूटोरियल देखें )। REST !=HTTP के बाद से आप इसका उपयोग करके एक RESTful इंटरफ़ेस लागू कर सकते हैं ।

AMQP भी HTTP से बहुत बेहतर प्रदर्शन करता है।

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