संदेश कतार बनाम वेब सेवाएँ? [बन्द है]


258

वेब सेवा के माध्यम से संदेश कतार के माध्यम से बात करने वाले ऐप्स के पक्ष में किन परिस्थितियों में होगा (मेरा मतलब है कि XML या JSON या YAML या HTTP पर जो भी हो, किसी विशेष प्रकार का नहीं)?

मुझे एक स्थानीय नेटवर्क पर दो ऐप्स के बीच बात करनी होगी। एक एक वेब ऐप होगा और दूसरे ऐप (अलग हार्डवेयर पर चलने) पर कमांड का अनुरोध करना होगा। अनुरोध उपयोगकर्ता बनाने, फ़ाइलों को इधर-उधर करने और निर्देशिकाओं को बनाने जैसी चीजें हैं। संदेश कतार का उपयोग करने के लिए मैं XML वेब सेवा (या सीधे टीसीपी या कुछ) के लिए किन परिस्थितियों में प्राथमिकता दूंगा?

वेब ऐप रूबी ऑन रेल्स है, लेकिन मुझे लगता है कि प्रश्न इससे व्यापक है।

जवाबों:


315

जब आप एक वेब सेवा का उपयोग करते हैं तो आपके पास एक ग्राहक और एक सर्वर होता है:

  1. यदि सर्वर विफल रहता है तो क्लाइंट को त्रुटि को संभालने की जिम्मेदारी लेनी चाहिए।
  2. जब सर्वर फिर से काम कर रहा होता है, तो क्लाइंट इसे फिर से भेजने के लिए जिम्मेदार होता है।
  3. यदि सर्वर कॉल का जवाब देता है और क्लाइंट विफल हो जाता है तो ऑपरेशन खो जाता है।
  4. आपके पास विवाद नहीं है, अर्थात: यदि लाखों ग्राहक एक सर्वर पर एक सेकेंड में एक वेब सेवा को कॉल करते हैं, तो संभवतः आपका सर्वर नीचे चला जाएगा।
  5. आप सर्वर से तत्काल प्रतिक्रिया की उम्मीद कर सकते हैं, लेकिन आप अतुल्यकालिक कॉल भी संभाल सकते हैं।

जब आप RabbitMQ, Beanstalkd, ActiveMQ, IBM MQ Series, Tuxedo जैसे संदेश कतार का उपयोग करते हैं, तो आप विभिन्न और अधिक दोष सहिष्णु परिणामों की अपेक्षा करते हैं:

  1. यदि सर्वर विफल हो जाता है, तो कतार संदेश को जारी रखती है (वैकल्पिक रूप से, भले ही मशीन बंद हो)।
  2. जब सर्वर फिर से काम कर रहा है, तो यह लंबित संदेश प्राप्त करता है।
  3. यदि सर्वर कॉल का जवाब देता है और क्लाइंट विफल हो जाता है, अगर क्लाइंट ने प्रतिक्रिया को स्वीकार नहीं किया है तो संदेश जारी रहता है।
  4. आपके पास विवाद है, आप तय कर सकते हैं कि सर्वर द्वारा कितने अनुरोधों को संभाला जाता है (इसके बजाय इसे कार्यकर्ता कहें)।
  5. आप तत्काल तुल्यकालिक प्रतिक्रिया की उम्मीद नहीं करते हैं, लेकिन आप सिंक्रोनस कॉल को लागू / अनुकरण कर सकते हैं।

संदेश पंक्ति में बहुत अधिक विशेषताएं हैं लेकिन यह तय करने के लिए अंगूठे का कुछ नियम है कि क्या आप स्वयं त्रुटि स्थितियों को संभालना चाहते हैं या उन्हें संदेश कतार में छोड़ देते हैं।


1
यदि SOAP / JMS बाइंडिंग का उपयोग किया जाता है, तो एक वेब सेवाओं पर ढीली युग्मन प्राप्त करता है।
koppor

सर्वर साइड पर कई माइक्रो सेवाओं के लिए जिसे वेब सेवा या कतारबद्ध पसंद किया जाना चाहिए?
शिवेंद्र प्रताप सिंह

प्रिय @ स्व। , क्या मुझे पता है कि इसका मतलब है कि हम MQ को सामान्य वेबसाइटों के साथ जोड़ सकते हैं? मान लीजिए कि मेरे पास वर्डप्रेस वेबसाइट (LAMP स्टैक) है। क्या मैं अपाचे के एमक्यू infront का उपयोग कर सकता हूं ताकि अनुरोध 1 के बाद 1 आए, बजाय एक ही समय में आने के। इस मामले में, ग्राहक (ब्राउज़र) अपाचे के बजाय एमक्यू से जुड़े हैं, क्या मैं सही हूं? लेकिन फिर, क्या ब्राउजर HTTP कनेक्शन को खुला रखता है और अपाचे का जवाब देने के लिए इंतजार करता रहता है? कृपया मुझे इस पर थोड़ा समझने में मदद करें। अपनी दयालुता की सराहना करें।
劇場

@ @ 期 劇場 आपका उपयोग मामला क्या है? आप ब्राउज़र का उपयोग करके अंतिम उपयोगकर्ता को लाभ पहुंचाने के लिए क्या प्रयास कर रहे हैं?
स्व।

क्लाइंट / सर्वर सेटअप के साथ ये चिंताएँ अभी भी कतार और सर्वर के बीच और क्लाइंट और कतार के बीच की चिंताएँ नहीं हैं? ऐसा लगता है कि क्लाइंट / सर्वर प्रतिमान अभी भी मौजूद है और अब दो स्थानों पर है।
कल्पनाथ

75

रीसेंट HTTP कॉल संदेश कतार अवधारणा को कैसे बदल सकता है, इस पर विचार करने में हाल ही में अनुसंधान की एक उचित मात्रा हुई है।

यदि आप किसी प्रक्रिया की अवधारणा और संसाधन के रूप में किसी कार्य का परिचय देते हैं, तो मध्य संदेश परत की आवश्यकता वाष्पीभूत होने लगती है।

उदाहरण के लिए:

POST /task/name
    - Returns a 202 accepted status immediately
    - Returns a resource url for the created task: /task/name/X
    - Returns a resource url for the started process: /process/Y

GET /process/Y
    - Returns status of ongoing process

एक कार्य में आरंभीकरण के लिए कई चरण हो सकते हैं, और जब पोल या POST को कॉलबैक URL पर पूरा किया जाता है, तो यह प्रक्रिया वापस आ सकती है।

यह मृत सरल है, और काफी शक्तिशाली हो जाता है जब आपको पता चलता है कि अब आप बिना किसी मध्य परत के सभी चल रही प्रक्रियाओं और कार्यों के एक आरएसएस / एटम फ़ीड की सदस्यता ले सकते हैं। किसी भी पंक्तिबद्ध प्रणाली को किसी भी तरह के वेब फ्रंट एंड की आवश्यकता होती है, और इस अवधारणा को कस्टम कोड की एक और परत के बिना बनाया गया है।

आपके संसाधन तब तक मौजूद हैं जब तक आप उन्हें हटा नहीं देते हैं, जिसका अर्थ है कि आप प्रक्रिया और कार्य पूरा होने के लंबे समय बाद ऐतिहासिक जानकारी देख सकते हैं।

आपने किसी भी अतिरिक्त जटिल प्रोटोकॉल के बिना, कई चरणों वाले कार्य के लिए भी सेवा खोज में निर्माण किया है।

GET /task/name
    - returns form with required fields

POST (URL provided form's "action" attribute)

आपकी सेवा खोज एक HTML रूप है - एक सार्वभौमिक और मानव पठनीय प्रारूप।

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

थोड़ी देर के लिए विचार करने के बाद, आप वापस बैठते हैं और महसूस करना शुरू करते हैं कि REST मैसेजिंग कतार और ESB की आवश्यकता को पूरी तरह से समाप्त कर सकता है।

http://www.infoq.com/presentations/BPM-with-REST


11
@ टैम्पायर दोष सहिष्णुता और आगे के बारे में क्या? REST अच्छा है, लेकिन डेवलपर ने उसे / स्वयं
मिडन रोसेनस्टार्क

10
@ यार के बारे में अधिकांश प्रश्न 'इस बारे में' क्या कहा जा सकता है, 'यह वेब पर कैसे संभाला जाता है?'। दोष सहिष्णुता लोड balancers, या यहां तक ​​कि dns रिकॉर्ड के हेरफेर के माध्यम से नियंत्रित किया जा सकता है। बाहर काम करने के लिए कुछ और मुद्दे हैं, जैसे क्षैतिज मापनीयता - वेब स्वाभाविक रूप से उस कुएं (ddos हमलों, उदाहरण के लिए) को संभाल नहीं पाता है।
टेम्प्रेचर

8
@ टैम्पायर, वेब पर कोई गारंटीकृत डिलीवरी नहीं है, है ना? मैं प्रस्तुत करता हूं और प्रार्थना करता हूं कि यह संदेश अपने गंतव्य तक पहुंच जाए। एक एमक्यू के साथ, मुझे पता है कि अगर मैं एमक्यू से मिलता हूं तो मैं करूंगा। यह संदेश को गंतव्य तक पहुँचाने का काम करेगा।
दान रोसेनस्टार्क

10
@ यार मानते हैं कि 'गारंटीकृत डिलीवरी' का क्या मतलब है, हालांकि। यह केवल संदेश कतार के अपटाइम के रूप में 'गारंटीकृत' है। संदेश कतार को एक REST सर्वर (एस) के साथ बदलें जो कार्यों और प्रक्रियाओं को संसाधनों के रूप में मानता है, और आपको कुछ और के समान 'गारंटी' मिली है। अनिवार्य रूप से, आपके पास अभी भी एक संदेश कतार है, लेकिन एक वेब मानक सुलभ प्रारूप में, जिसे किसी भी वेब टूल का उपयोग करके मॉनिटर किया जा सकता है।
टेम्प्रेचर

16
@ यार - मुझे नहीं लगता कि बहुत से लोग इस समस्या को समझते हैं कि एमक्यू इस तरह की चीजों पर विचार करने के लिए पर्याप्त हल करने की कोशिश कर रहा है। वे एमक्यू को समझते हैं, लेकिन यह समस्या स्थान को समझने से अलग है। हालांकि, यह एक व्यापक मुद्दा है, क्योंकि मुझे लगता है कि दुनिया में अधिकांश प्रोग्रामर और प्रबंधकों को इंजीनियर समाधानों के बजाय टुकड़ों को जोड़ने के लिए प्रशिक्षित किया गया है।
18

32

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

संदेश की कतारें आपको समय के साथ बेहतर पैमाने देने की अनुमति देती हैं। यह भारी गतिविधि के फटने से निपटने की आपकी क्षमता में सुधार करता है, क्योंकि वास्तविक प्रसंस्करण को समय पर वितरित किया जा सकता है।

ध्यान दें कि संदेश कतार और वेब सेवाएँ ऑर्थोगोनल अवधारणाएं हैं, अर्थात वे पारस्परिक रूप से अनन्य नहीं हैं। उदाहरण के लिए, आपके पास XML आधारित वेब सेवा हो सकती है जो संदेश कतार में एक अंतरफलक के रूप में कार्य करती है। मुझे लगता है कि आपके लिए खोज का अंतर संदेश कतार बनाम अनुरोध / प्रतिक्रिया है, बाद वाला तब होता है जब अनुरोध को समकालिक रूप से संसाधित किया जाता है।


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

मेरा नया प्रश्न यह है कि क्या होगा यदि प्रक्रिया समकालिक हो, लेकिन समयावधि पर अतुल्यकालिक हो? तब शायद वेब सेवाएं एक बेहतर फिट होंगी।
दान रोसेनस्टार्क

27

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

वाक्यांश "वेब सेवाएं" मुझे HTTP पर वितरित घटक के लिए तुल्यकालिक कॉल के बारे में सोचती हैं। वेब सेवाओं का उपयोग करें यदि अनुरोधकर्ता को एक प्रतिक्रिया वापस चाहिए।


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

22

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


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