Performance SOAP与XML-RPC或REST的性能对比

Performance SOAP与XML-RPC或REST的性能对比,performance,web-services,rest,soap,xml-rpc,Performance,Web Services,Rest,Soap,Xml Rpc,关于使用XML-RPC或REST解决方案的简单性的争论很容易理解,也很难反驳 我还经常听到这样的观点,即SOAP开销的增加可能会显著影响使用的带宽,甚至可能影响延迟。我希望看到量化影响的测试结果。任何人都知道此类信息的好来源吗?REST作为协议不定义任何形式的消息信封,而SOAP有这个标准 因此,将两者进行比较有点过于简单,因为它们是苹果对桔子 也就是说,一个SOAP信封(减去数据)只有几个k,因此如果您通过SOAP和REST检索序列化对象,那么速度应该不会有任何明显的差异。我不知道基准测试问题

关于使用XML-RPC或REST解决方案的简单性的争论很容易理解,也很难反驳


我还经常听到这样的观点,即SOAP开销的增加可能会显著影响使用的带宽,甚至可能影响延迟。我希望看到量化影响的测试结果。任何人都知道此类信息的好来源吗?

REST作为协议不定义任何形式的消息信封,而SOAP有这个标准

因此,将两者进行比较有点过于简单,因为它们是苹果对桔子


也就是说,一个SOAP信封(减去数据)只有几个k,因此如果您通过SOAP和REST检索序列化对象,那么速度应该不会有任何明显的差异。

我不知道基准测试问题的任何答案,但是,我所知道的SOAP格式是肯定的,它确实有开销,但每个请求的开销不会增加:如果有一个元素发送到web服务,则开销+一个元素构造;如果有1000个元素发送到web服务,则开销+1000个元素构造。当为特定操作格式化XML请求时,会产生开销,但请求中的每个参数元素的格式都相同


如果您坚持使用可重复的、短时间的数据突发(比如500个元素),那么速度应该是可以接受的。

SOAP与REST速度的主要影响不是与连线速度有关,而是与可访问性有关。REST建议使用web的语义,而不是试图通过XML穿越web,因此RESTful web服务通常被设计为正确使用缓存头,因此它们与web的标准基础设施(如缓存代理,甚至本地浏览器缓存)配合良好。此外,使用web的语义意味着像ETag和自动zip压缩这样的东西是众所周知的提高效率的方法

…现在你说你想要基准。好吧,在谷歌的帮助下,我发现谁的测试显示REST比SOAP快4-6倍,另一个测试也支持REST。

扩展“pjz”的答案。
如果您正在获取大量基于SOAP操作的信息(get*类型的调用),那么目前无法缓存它们。但是,如果要使用REST实现这些相同的操作,则有可能缓存数据(取决于您的业务上下文),如上所述。由于SOAP使用POST进行操作,它无法在服务器端缓存信息。

SOAP和任何其他使用XML的协议通常会使消息膨胀很多—这可能是问题,也可能不是问题,具体取决于上下文

类似JSON的东西会更紧凑,序列化/反序列化速度可能更快,但不要因为这个原因而专门使用它。做你当时觉得有意义的事,如果有问题就改变它

通常使用HTTP的任何东西(除非它重用HTTP 1.1 keepalive连接,而许多实现都不这样做)都会为每个请求启动一个新的TCP连接;这是非常糟糕的,尤其是在高延迟链接上。HTTPS更糟糕。如果从一个发送者到一个接收者有很多短请求,请考虑如何减少这些开销


将HTTP用于任何类型的RPC(无论是SOAP还是其他)都会产生这种开销。其他RPC协议通常允许您保持连接打开。

SOAP的速度肯定较慢。有效负载明显更大,组装、传输、解析、验证和处理速度较慢。

关于这一点,已经做了一些研究,您可能会发现这些研究提供了信息。请参见以下内容:

会议上还有一个关于这个主题的有趣的表演对话(有些过时)


简言之,这些来源中的大多数似乎都同意SOAP和REST对于通用数据的性能大致相同。然而,一些结果似乎表明,对于二进制数据,REST实际上可能性能较差。请参阅我链接的论坛中的链接,了解更多详细信息。

我想这里的主要问题是如何将RPC与SOAP进行比较

它们都提供相同的通信抽象方法,通过使用存根对象和返回的原始/复杂数据类型进行操作,而不知道下面是如何处理的

我总是更喜欢(JSON-)RPC,因为

  • 它很轻
  • 所有编程语言都有很多很棒的实现
  • 它很容易学习/使用/创造
  • 速度很快(特别是使用JSON)
尽管您应该使用SOAP是有原因的,也就是说,如果您需要命名参数而不是依赖它们的正确顺序


您从这个stackoverflow中获得的更多细节

我认为说REST没有定义消息信封是不合理的;它说“使用http使用的东西”,这是mime-types。哦,真的吗?我想发送一个序列化的C类,消费者的EST协议是如何知道如何从MIME类型解析它的。我想当您尝试考虑REST协议时,问题就开始了。REST是一种可以使用HTTP协议的架构风格。我将这个问题解释为使用“REST”来指代(通常指“HTTP上的XML”或(不太常见的)“HTTP上的自定义格式”,在这种情况下,比较是一个有效的问题。@Tim Cooper-创造REST这个术语的人会强烈反对这一说法,以及其他大多数帮助传播REST的人。[阅读维基百科上关于REST的更多内容](帮助推广)希望了解为什么
REST!==XML over HTTP
。答案很好pjz,您是否意识到您的答案没有关于XML-RPC的任何内容,或者为什么它没有出现在需要考虑的首选项中。更新了“一个”的链接