2008-09-20 13 views
45

का प्रदर्शन एक्सएमएल-आरपीसी या आरईएसटी का उपयोग करके समाधान की सादगी के बारे में तर्क समझने में आसान और तर्क देना मुश्किल है।एसओएपी बनाम एक्सएमएल-आरपीसी या आरईएसटी

मैंने अक्सर यह भी तर्क सुना है कि एसओएपी के बढ़ते ओवरहेड का इस्तेमाल बैंडविड्थ और संभवतः विलंबता पर भी महत्वपूर्ण रूप से प्रभावित हो सकता है। मैं एक परीक्षण के परिणाम देखना चाहता हूं जो प्रभाव को मापता है। किसी को भी ऐसी जानकारी के लिए एक अच्छा स्रोत पता है?

उत्तर

6

इस बारे में कुछ अध्ययन किए गए हैं जिनके बारे में आपको जानकारी मिल सकती है। कृपया निम्न देखें:

भी MSDN Forums पर विषय के बारे में एक (कुछ पुराने हो चुके) दिलचस्प प्रदर्शन बातचीत नहीं है।

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

19

प्रोटोकॉल के रूप में REST संदेश लिफाफे के किसी भी प्रकार को परिभाषित नहीं करता है, जबकि एसओएपी के पास यह मानक है।

इसके लिए, दोनों की कोशिश करने और तुलना करने के लिए यह कुछ सरल है, वे संतरे सेब हैं।

यह कहा गया है कि, एक एसओएपी लिफाफा (डेटा घटाकर) केवल कुछ ही है, इसलिए गति में कोई ध्यान देने योग्य अंतर नहीं होना चाहिए बशर्ते आप एसओएपी और आरईएसटी दोनों के माध्यम से एक धारावाहिक वस्तु को पुनः प्राप्त कर रहे हों।

+1

मुझे लगता है यह कहना है कि बाकी संदेश लिफाफा को परिभाषित नहीं करता disingenous है; यह कहता है कि 'http का उपयोग किस प्रकार करता है', जो कि माइम-प्रकार है। – pjz

+0

ओह सच में? मैं एक धारावाहिक सी # कक्षा भेजना चाहता हूं, आरईएसटी प्रोटोकॉल का उपभोक्ता कैसे जान रहा है कि इसे माइम प्रकार से कैसे पार्स किया जाए। – FlySwat

+23

मुझे लगता है कि समस्या तब शुरू होती है जब आप एक प्रोटोकॉल को पुन: प्रयास करते हैं और विचार करते हैं। आरईएसटी एक वास्तुशिल्प शैली है जो HTTP प्रोटोकॉल का उपयोग कर सकती है। –

2

मुझे बेंचमार्किंग प्रश्न के किसी भी उत्तर के बारे में पता नहीं है, हालांकि, मुझे एसओएपी प्रारूप के बारे में क्या पता है, यह ओवरहेड है, लेकिन ओवरहेड प्रति अनुरोध में वृद्धि नहीं करता है: यदि आपके पास एक तत्व भेजा गया है वेब सेवा के लिए, आपके पास ओवरहेड + एक तत्व निर्माण है, और यदि आपके पास वेब सेवा में 1000 तत्व भेजे गए हैं, तो आपके पास ओवरहेड + 1000 तत्व निर्माण है। ओवरहेड होता है क्योंकि एक्सएमएल अनुरोध को विशेष ऑपरेशन के लिए स्वरूपित किया जाता है, लेकिन अनुरोध में प्रत्येक व्यक्तिगत तर्क तत्व को स्वरूपित किया जाता है।

यदि आप दोहराने योग्य, डेटा के छोटे विस्फोट (कहते हैं, 500 तत्व), गति को स्वीकार्य होना चाहिए।

62

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

.. और अब आप कहते हैं कि आप मानक चाहते हैं। खैर, Google की सहायता से, मुझे one guy मिला, जिसका परीक्षण एसईएपी की तुलना में आरईएसटी को 4-6x तेज और अन्य paper दिखाता है जो आरईएसटी का भी समर्थन करता है।

+3

ग्रेट उत्तर पीजेजे, क्या आपको एहसास हुआ है कि आपके उत्तर में एक्सएमएल-आरपीसी के बारे में कुछ भी कहना नहीं है या यह शीर्ष विकल्पों में क्यों नहीं दिखता है। –

+1

"एक लड़के" के लिए अद्यतन लिंक http://www.learnosity.com/techblog/2008/03/cfmx-soap-vs-rest-benchmarks/ – Fedearne

5

"pjz" के उत्तर पर विस्तार।

यदि आपको एसओएपी संचालन के आधार पर बहुत सारी जानकारी मिलती है (कॉल * प्रकार * कॉल प्राप्त करें), तो वर्तमान में आप उन्हें कैश कर सकते हैं। लेकिन अगर आप आरईएसटी का उपयोग करके इन समान परिचालनों को लागू करना चाहते हैं, तो एक संभावना है कि उपरोक्त वर्णित डेटा (आपके व्यावसायिक संदर्भ पर निर्भर करता है) कैश किया जा सकता है। चूंकि SOAP अपने परिचालनों के लिए POST का उपयोग करता है, इसलिए यह सर्वर की ओर से जानकारी को कैश नहीं कर सकता है।

8

एसओएपी और एक्सएमएल का उपयोग करने वाले किसी भी अन्य प्रोटोकॉल आम तौर पर आपके संदेशों को थोड़ा सा फटकारता है - यह संदर्भ के आधार पर कोई समस्या हो सकती है या नहीं भी हो सकती है।

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

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

किसी भी प्रकार के आरपीसी (चाहे एसओएपी या कुछ और) के लिए HTTP का उपयोग करना हमेशा उस ओवरहेड को लेना होगा। अन्य आरपीसी प्रोटोकॉल आम तौर पर आपको कनेक्शन खोलने की अनुमति देते हैं।

4

SOAP निश्चित रूप से धीमा है। पेलोड काफी महत्वपूर्ण हैं जो इकट्ठा करने, परिवहन, पार्स, सत्यापन और प्रक्रिया में धीमे होते हैं।

0

मुझे लगता है कि यहां मुख्य प्रश्न यह है कि एसओएपी के साथ आरपीसी की तुलना कैसे की जाती है।

वे दोनों आपके द्वारा संचालित स्टब ऑब्जेक्ट्स और आदिम/जटिल डेटा प्रकारों के द्वारा संचार अबास्ट्रक्शन के समान दृष्टिकोण की सेवा करते हैं, जो वास्तव में बिना यह जानते हैं कि यह सब कैसे नियंत्रित किया जाता है।

मैं हमेशा पसंद करेंगे (JSON-) आरपीसी क्योंकि

  • यह हल्के है
  • वहाँ सभी प्रोग्रामिंग भाषाओं के लिए कई महान कार्यान्वयन हैं
  • यह जानने/उपयोग/बनाने के लिए आसान है
  • यह तेज़ है (विशेष रूप से JSON के साथ)

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

कुछ और जानकारी उनके सही क्रम पर निर्भर रहने के बजाय मापदंडों नामकरण आप इस stackoverflow से प्राप्त question

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