簡體   English   中英

SOAP與XML-RPC或REST的性能

[英]Performance of SOAP vs. XML-RPC or REST

關於使用XML-RPC或REST的解決方案的簡單性的論點很容易理解,很難與之爭論。

我經常也聽到過這樣的論點,即SOAP增加的開銷可能會顯着影響已使用的帶寬甚至延遲。 我希望看到量化影響的測試結果。 有誰知道這些信息的良好來源?

SOAP與REST速度的主要影響與線速無關,但與可達性有關。 REST建議使用Web的語義而不是嘗試通過XML進行隧道傳輸,因此RESTful Web服務通常設計為正確使用緩存頭,因此它們可以很好地與Web的標准基礎結構(如緩存代理甚至本地瀏覽器緩存)配合使用。 此外,使用Web的語義意味着像ETag和自動zip壓縮這樣的東西是很好理解的方法來提高效率。

..現在你說你想要基准測試。 好吧,在谷歌的幫助下,我發現一個人的測試顯示REST比SOAP快4-6倍,而另一篇文章也支持REST。

作為協議的REST不定義任何形式的消息信封,而SOAP確實具有此標准。

因此,嘗試和比較兩者有點簡單,它們是蘋果到橙子。

也就是說,SOAP信封(減去數據)只有幾k,因此如果您通過SOAP和REST檢索序列化對象,速度應該沒有任何明顯的差異。

SOAP和使用XML的任何其他協議通常會使您的消息膨脹很多 - 根據上下文,這可能是也可能不是問題。

像JSON這樣的東西會更緊湊,可能更快地序列化/反序列化 - 但是不要因為這個原因而專門使用它。 做任何你覺得有意義的事情,如果這是一個問題就改變它。

通常使用HTTP的任何東西(除非它重用HTTP 1.1 keepalive連接,許多實現都沒有)為每個請求啟動一個新的TCP連接; 這非常糟糕,特別是在高延遲鏈接上。 HTTPS更糟糕。 如果您有一個發送者到一個接收者的大量短請求,請考慮如何將這個開銷拿出來。

對任何類型的RPC(無論是SOAP還是其他)使用HTTP總是會產生這種開銷。 其他RPC協議通常允許您保持連接打開。

有一些研究已經完成,你可能會發現信息。 請參閱以下內容:

MSDN論壇上還有一個(有點過時的)有趣的性能對話。

簡而言之 - 大多數這些來源似乎都同意SOAP和REST與通用數據的性能大致相同。 然而,一些結果似乎表明,對於二進制數據,REST實際上可能性能較差。 請參閱我鏈接的論壇中的鏈接以獲取更多詳細信息。

擴大“pjz”的答案。

如果您正在獲取大量基於SOAP操作的INFORMATION(get *類型的調用),那么目前無法緩存它們。 但是,如果您要使用REST實現這些相同的操作,則可能會緩存數據(取決於您的業務環境),如上所述。 因為SOAP使用POST進行操作,所以它無法在服務器端緩存信息。

SOAP肯定更慢。 有效負載明顯較大,組裝,傳輸,解析,驗證和處理速度較慢。

我不知道基准測試問題的任何答案,但是,我對SOAP格式的了解是肯定的,它確實有開銷,但是每個請求的開銷不會增加:如果你有一個元素被發送到Web服務,你有開銷+一個元素構造,如果你有1000個元素發送到Web服務,你有開銷+ 1000元素構造。 在為特定操作格式化XML請求時發生開銷,但請求中的每個單獨的參數元素的格式都相同。

如果您堅持使用可重復的,短暫的數據突發(例如,500個元素),速度應該是可以接受的。

我想這里的主要問題是如何比較RPC和SOAP。

他們都通過使用你操作的存根對象和你得到的原始/復雜數據類型來提供相同的通信抽象方法,而不知道如何在下面處理這一切。

我總是喜歡(JSON-)RPC因為

  • 它很輕巧
  • 所有編程語言都有很多很棒的實現
  • 學習/使用/創建簡單
  • 它很快(特別是使用JSON)

雖然有理由你應該使用SOAP,即如果你需要命名參數而不是依賴於它們的正確順序

您從此stackoverflow 問題中獲得的更多詳細信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM