2010-11-12 16 views
27

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

अग्रिम धन्यवाद।

+0

इस http://stackoverflow.com/questions/106546/performance-of-soap-vs-xml-rpc-or-rest/ के एक dup है? – pjz

+0

आप जो खो देते हैं वह "इंजीनियरिंग से अधिक" है :-) एसओएपी के पहलुओं। एन्क्रिप्शन, संदेश हस्ताक्षर, प्रमाणीकरण, गैर-प्रतिष्ठा, स्वयं वर्णन सेवाओं आदि। यदि आपको इनमें से कोई भी करने की ज़रूरत है (और अधिकतर सेवाएं नहीं!) तो SOAP के लिए जाएं। –

उत्तर

42

प्रदर्शन व्यापक विषय है।

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

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

संक्षेप में, मैं 'हाँ' कहूंगा, आप आरईएसटी के साथ अधिक प्रदर्शन करेंगे। साथ ही, यह (मेरी राय में) आपके इंटरफ़ेस को आपके ग्राहकों के लिए उपभोग करने में आसान बना देगा। इसलिए, न केवल आपका सर्वर दुबला हो जाता है बल्कि ग्राहक भी।

हालांकि, चीजों की जोड़ी पर विचार करना (जब से तुम से पूछा, 'क्या आप खो देंगे?'):

RESTful इंटरफेस में थोड़ा और अधिक "बातूनी" हो जाते हैं, तो अपने डोमेन के आधार पर और आप कैसे डिजाइन अपने संसाधन, आप अधिक HTTP अनुरोध कर सकते हैं।

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

+5

मैं के बारे में बाकी इंटरफेस अधिक बातूनी जा रहा है आश्वस्त नहीं हूँ, लेकिन अलग से है कि यह एक ठोस जवाब नहीं है। –

+0

वास्तव में उस प्रश्न का उत्तर देने के लिए आपको विशिष्ट उपयोग-मामलों और विशिष्ट लाइब्रेरी कार्यान्वयन को संबोधित करने की आवश्यकता है। यह उत्तर सत्रों, "चतुरता" और "ग्राहकों के लिए आसान" से शुरू होने वाली कई धारणाएं बनाता है। –

+0

रीस्टफुल सेवा में सर्वर साइड सत्र हो सकते हैं। यह आमतौर पर कुकीज़ या कस्टम http शीर्षकों के माध्यम से लागू किया जाता है। – Oooogi

4

मैं निश्चित रूप से एक विशेषज्ञ नहीं हूं जब एसओएपी बनाम आरईएसटी की बात आती है, लेकिन मुझे पता है कि एकमात्र प्रदर्शन अंतर यह है कि एसओएपी के पास एक्सएमएल आधारित होने के बाद पैकेट भेजने/प्राप्त करते समय बहुत अधिक ओवरहेड होता है, इसके लिए एसओएपी हेडर की आवश्यकता होती है, आदि REST अनुरोध करने के लिए URL + querystring का उपयोग करता है, और इस प्रकार तार पर कई केबी नहीं भेजता है।

मुझे यकीन है कि अन्य ppl पर यहाँ देखते हैं हूँ अतः जो आप बेहतर और अधिक विस्तृत जवाब दे सकते हैं, लेकिन कम से कम मैंने कोशिश की;)

13

सोप पार्स किया जा सकता एक एक्सएमएल संदेश और जो कुछ < riduculouslylongnamespace की आवश्यकता है: mylongtagname> अतिरिक्त </riduculouslylongnamespace: mylongtagname> सामान भेजने और प्राप्त करने के लिए।

आरईएसटी आमतौर पर जेएसओएन की तरह कुछ और अधिक terse और आसानी से पार्स का उपयोग करता है।

हालांकि व्यवहार में अंतर इतना अच्छा नहीं है।

एक्सएमएलिस से डीओएम का निर्माण आमतौर पर सी ++ या जावा में एक्सईआरसीईएस जैसे कोड का एक सुपरफास्ट सुपरप्टाइमिज्ड टुकड़ा किया जाता है जबकि अधिकांश जेएसओएन पार्सर्स आपके स्वयं के या उत्प्रेरक कैटोगरी में हैं।

फास्ट नेटवर्क वातावरण (लैन या ब्रॉडबैंड) में एक या दो के बनाम 10 से 15 के बीच भेजने में कोई अंतर नहीं है।

+0

Json * धीमी * एक्सएमएल – MariuszS

+1

से यह धीमी हो सकता है और यह तेजी से हो सकता है, वे अंत में पाठ स्वरूप में दोनों डेटा कर रहे हैं। –

4

बस wuher के जवाब देने के लिए एक छोटे से जोड़ने के लिए।

HTTP हेडर बाइट्स जब क्रोम वेब ब्राउज़र का उपयोग कर इस पेज का अनुरोध: 761
बाइट्स wikipedia लेख में नमूना साबुन संदेश के लिए आवश्यक: 299

मेरा निष्कर्ष: यह तार पर बाइट्स के आकार नहीं है कि आरईएसटी अच्छी तरह से प्रदर्शन करने की अनुमति देता है।

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

+0

आपके उत्तर के लिए धन्यवाद! – Luixv

+0

मैंने अपनी निक को जेडी से वूहर में बदल दिया (यह जवाब जेडी के जवाब को संदर्भित करता है, इसलिए वास्तव में यह वास्तव में जवाब है)। भ्रम के लिए खेद है, मुझे कभी भी जेडीई निक को पहले स्थान पर नहीं लेना चाहिए था .. – wuher

+1

मुझे नहीं लगता कि यह एक उचित तुलना है, एक आराम आधारित नमूना विकसित करना जो विकिपीडिया पर साबुन उदाहरण के समान ही होगा विकिपीडिया उदाहरण से तार। – stevenrcfox

10

आप इस प्रश्न को वाक्यांश देते हैं जैसे कि आरईएसटी और एसओएपी किसी मौजूदा प्रणाली में किसी तरह का अंतर-परिवर्तनीय था। वो नहीं हैं।

आप सोप (एक प्रौद्योगिकी) का उपयोग करते हैं, आप आमतौर पर एक प्रणाली है कि 'तरीकों' में परिभाषित किया गया है, के बाद से प्रभाव में आप आरपीसी साथ काम कर रहे है।

आप बाकी (एक स्थापत्य शैली, एक तकनीक नहीं) का उपयोग करते हैं तो आप एक प्रणाली है कि और बिल्कुल नहीं तरीकों में 'संसाधनों' के संदर्भ में परिभाषित किया गया है बना रहे हैं। एसओएपी और आरईएसटी के बीच कोई 1: 1 मैपिंग नहीं है। सिस्टम आर्किटेक्चर मूल रूप से अलग है।

या आप केवल "यूआरआई के माध्यम से आरपीसी" है, जो अक्सर बाकी के साथ भ्रमित हो जाता है के बारे में बात कर रहे हैं?

+6

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

+3

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

3

यह सब निर्भर करता है। आरईएसटी में वास्तव में उस स्थिति के लिए एक अच्छा (अच्छा) उत्तर नहीं है जहां अनुरोध डेटा बड़ा हो सकता है। मुझे इस बिंदु को महसूस होता है अगर कभी-कभी रीस्ट को हाइपिंग करते समय अनदेखा किया जाता है।

चलो एक ऐसी सेवा की कल्पना करें जो आपको हजारों विभिन्न वस्तुओं के लिए सूचनात्मक डेटा का अनुरोध करने की अनुमति दे।

एसओएपी डेवलपर एक ऐसी विधि को परिभाषित करेगा जो आपको एक या एक से अधिक वस्तुओं के लिए जानकारी को पुनर्प्राप्त करने की अनुमति देगा ... एक कॉल में।

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

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

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

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

+0

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

+1

मुझे लगता है कि जिस बिंदु को मैं बनाने की कोशिश कर रहा था वह यह था कि मुझे उन परिस्थितियों में बहुत सुंदर के रूप में आरईएसटी दिखाई नहीं दे रहा है जहां अनुरोध बड़ा है और इसकी जटिल डेटा संरचना है। उन परिदृश्य _do_ मौजूद हैं लेकिन स्वीकार्य रूप से ज्यादातर मामलों में अनुरोध छोटे और छोटे हैं और ऐसे मामलों में (जो मुझे लगता है कि सभी मामलों में से अधिकांश है) एसओएपी की तुलना में आरईएसटी _is_ एक उत्कृष्ट विकल्प है। आरईएसटी दुनिया में अगर अनुरोध _is_ बड़ा है तो आपको यूआरएल से बहुत लंबा बनने से बचने के लिए अनुरोध डेटा को शरीर में एम्बेड करना होगा। और फिर क्या? क्या यह अंतःक्रियाशीलता के लिए अच्छा है? – peterh

4

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

सुरक्षा एक और महत्वपूर्ण प्रदर्शन चिंता है। आरईएसटी अनुप्रयोग आमतौर पर टीएलएस या अन्य सत्र परत सुरक्षा तंत्र का उपयोग करते हैं। टीएलएस डब्ल्यूएस सिक्योरिटी (डब्ल्यूएस सिक्योरिटी भी security flaws से पीड़ित) जैसे अनुप्रयोग स्तर सुरक्षा तंत्र का उपयोग करने से बहुत तेज है।

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

1

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

उत्तर वास्तव में कार्यात्मक और गैर-कार्यात्मक आवश्यकताओं पर निर्भर करता है। नीचे सूचीबद्ध प्रश्न पूछने से आपको चुनने में मदद मिलेगी।

रेफरी: http://java-success.blogspot.ca/2012/02/java-web-services-interview-questions.html

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

0

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

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