2012-03-08 11 views
31

किसी विशेष समस्या की असीमित/तुल्यकालिक प्रकृति के अलावा और ध्यान में रखते हुए कि एमओएम (इस मामले में जेएमएस चुनने के लिए) लोड संतुलन और दूसरों की तरह अतिरिक्त सुविधाओं की पेशकश करते हैं, आरईएसटी या उपाध्यक्ष के बजाय जेएमएस चुनते समय कोई और क्या विचार कर सकता है -versa?जेएमएस का उपयोग कब करें और आरईएसटी का उपयोग कब करें?

धन्यवाद

+2

ये दो अलग-अलग तकनीकें और पैटर्न हैं .... और नतीजतन आपका प्रश्न कोई समझ नहीं आता है। – Nix

+9

@Nix ऐसे पेडेंट नहीं बनें। एक अनुप्रयोग एकीकरण बिंदु से, आरईएसटी आधारित दृष्टिकोण या एमओएम आधारित दृष्टिकोण पर विचार करना पूरी तरह से मान्य है। अगर कुछ भी है, तो मुझे आश्चर्य है कि एसओएपी सेवाओं पर भी विचार नहीं किया जा रहा था। –

+1

@Nix मैं या तो तकनीकों का उपयोग करके एक ही एकीकरण प्राप्त कर सकता हूं, इस कारण से सवाल वैध है। वास्तव में एक महान सवाल है। –

उत्तर

40

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

एमओएम (Message Oriented Middleware) आसानी से स्केल नहीं करता है (लेकिन आपकी आवश्यकताओं के लिए काफी बड़ा हो सकता है)। आरईएसटी वेब पैमाने पर काम करता है।

एमओएम में economies of scale नहीं है। डेटा पुनर्प्राप्ति अनुरोधों के लिए, प्रत्येक बार जब डेटा का एक विशेष टुकड़ा अनुरोध किया जाता है, तो दूसरा संदेश सर्वर पर भेजा जाना चाहिए और सर्वर द्वारा जवाब दिया जाना चाहिए। एक आरईएसटी आधारित प्रणाली में, उसी डेटा के अनुरोधों को HTTP cache द्वारा सर्विस किया जा सकता है। इसका मतलब यह है कि अनुरोधों की मात्रा समय के साथ बढ़ जाती है, इसलिए एमओएम आधारित प्रणाली अनुरोध के अनुसार उसी दर पर सर्वर लोड वृद्धि को देखेगी। एक आरईएसटी आधारित प्रणाली अनुरोधों की तुलना में धीमी गति से सर्वर लोड वृद्धि को देखेगी।

एमओएम आपको chain of custody problem के साथ केवल आपको काटने के लिए गारंटीकृत डिलीवरी के साथ आग और भूलने वाले संदेशों के साथ लुभाएगा।

एमओएम सिंक्रोनस अनुरोध-उत्तर के लिए भयानक है क्योंकि सर्वर धीरे-धीरे धीमा हो जाएगा (यानी टाइमआउट के लिए प्रतीक्षा करें)। जब कोई अनुरोध विफल होने जा रहा है, तो आप इसे तेजी से विफल करना चाहते हैं। एक सर्वर आधारित है, तो एक आरईएसटी आधारित सेवा के लिए एक HTTP अनुरोध तत्काल विफल हो जाएगा (टीसीपी कनेक्ट पर)।

माँ अतुल्यकालिक अनुरोध-उत्तर संदेश भेजने के लिए उपयोगी है, लेकिन उसके बाद आप जहां अनुरोध और उत्तर (संकेत के बीच में राज्य को स्टोर करने की समस्या के साथ छोड़ दिया जाएगा: अपने विकल्पों File or Regular Database हैं, Message या एक NoSQL Database)। अक्सर अतिरिक्त कार्यान्वयन प्रयास asynchronicity के कथित फायदे के लायक नहीं है। यदि आपको वास्तव में इसकी आवश्यकता है तो आरईएसटी आधारित सेवाएं एसिंक्रोनस अनुरोधों का समर्थन करती हैं। 202 Accepted इस स्थिति में आपका मित्र है।

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

दूसरे शब्दों में, एक जेएमएस सर्वर में निवेश करने की बजाय, एक अच्छा कैशिंग HTTP लोड बैलेंसर में निवेश करें।

+2

मुझे वास्तव में यह जवाब पसंद है। +1 :) – ses

+14

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

+0

@PaulLegato मैं एक दशक से अधिक समय तक एमओएम अंतरिक्ष में काम कर रहा हूं। यह मेरी रोटी और मक्खन है और यह बेकार है। गिम्मी एक उदाहरण है जहां एमओएम आरईएसटी की तुलना में बेहतर तकनीकी विकल्प है। –

13

आप इन दोनों प्रौद्योगिकियों तुलना नहीं कर सकते।

REST एक स्टेटस/पैटर्न है जो आपको एक स्टेटलेस संसाधनों तक पहुंचने का एक संगठित तरीका प्रदान करता है।

एमओएम Sysems/JMS एक पैटर्न है जो सिस्टम के बीच संदेशों को साझा करने के लिए तैयार किया गया है। एक विश्वसनीय फैशन में डेटा के बारे में, डेटा के बारे में।


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


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

+0

आप आरईएसटी का उपयोग कर सिस्टम के बीच भरोसेमंद डेटा साझा कर सकते हैं। एटम फ़ीड इस का एक आदर्श उदाहरण हैं। –

+1

मैं नहीं कह रहा हूं कि आप नहीं कर सकते हैं। आरईएसटी के पूरे उद्देश्य की बात है। – Nix

+2

"एमओएम Sysems/JMS एक पैटर्न है जो सिस्टम के बीच संदेशों को साझा करने के लिए तैयार किया गया है।" मैं कह रहा हूं कि आरईएसटी वास्तव में अच्छा है। आईएमओ आप आसानी से जेएमएस से आरईएसटी की तुलना कर सकते हैं क्योंकि वे दोनों अनुप्रयोग एकीकरण समस्याओं को हल करने के लिए देख रहे हैं। क्या आपके पास * कुछ भी * का उदाहरण है जो एक त्वरित दृष्टिकोण से जेएमएस के साथ बेहतर हल हो गया है? –

संबंधित मुद्दे