SOAP与XML-RPC或REST的性能
关于使用XML-RPC或REST的解决scheme简单性的争论很容易理解,很难与之争辩。
我也经常听到一些观点,认为增加的SOAP开销可能会显着影响已使用的带宽,甚至可能会延迟。 我希望看到量化影响的testing结果。 任何人都知道这些信息的好来源?
有一些研究已经完成,你可能会发现信息。 请看下面的内容:
- SO:rest与肥皂performance
- 问答:SOAP和REST 101
- 更新了SQL Server数据服务:Northwind REST和SOAP上传
在MSDN论坛上也有关于该主题的有趣的性能对话(有点过时)。
简而言之,大多数这些消息来源似乎都认为SOAP和REST对于通用数据的性能大致相同。 然而,一些结果似乎表明,对于二进制数据,REST可能实际上性能较差。 请参阅我链接的论坛中的链接了解更多详情。
SOAP与REST速度的主要影响与线速无关,而与可玩性有关。 RESTbuild议使用Web的语义,而不是试图通过XML隧道,所以REST风格的Web服务通常被devise为正确使用caching头,所以它们与Web的标准基础架构(如caching代理甚至本地浏览器caching)一起工作良好。 另外,使用Web的语义意味着像ETags和自动压缩压缩之类的东西是提高效率的好方法。
..现在你说你想要的基准。 好吧,在Google的帮助下,我发现一个人的testing显示REST比SOAP快4-6倍,另一篇文章也支持REST。
作为协议的REST没有定义任何forms的消息信封,而SOAP确实有这个标准。
因此,尝试和比较两者,有点简单,它们是橙子的苹果。
也就是说,SOAP信封(减去数据)只有几个k,所以如果您通过SOAP和REST检索序列化对象,速度不应该有任何明显的差异。
SOAP和任何其他使用XML的协议通常会使您的消息膨胀很多 – 根据上下文,这可能是也可能不是问题。
像JSON这样的东西会更紧凑,也许更快的序列化/反序列化 – 但不要专门用于这个原因。 做任何你觉得有意义的事情,如果这是一个问题,改变它。
通常使用HTTP的任何东西(除非它重用了一个HTTP 1.1 keepalive连接,许多实现不会)为每个请求启动一个新的TCP连接; 这是非常糟糕的,特别是在高延迟链路上。 HTTPS更糟糕。 如果从一个发件人到另一个收件人有很多简短的请求,那么请考虑如何将这个开销拿出来。
对任何types的RPC使用HTTP(无论是SOAP还是其他)总是会导致这种开销。 其他RPC协议通常允许您保持连接打开。
扩大“pjz”的答案。
如果您获得了大量的基于SOAP操作的信息(获得*types的调用),那么目前您无法caching它们。 但是,如果您要使用REST实现这些相同的操作,则可能会caching数据(取决于您的业务上下文),如上所述。 由于SOAP使用POST进行操作,因此无法在服务器端caching信息。
SOAP肯定是慢的。 有效负载明显较大,组装,传输,parsing,validation和处理速度较慢。
我不知道任何基准问题的答案,但是,我所知道的SOAP格式是肯定的,它确实有开销,但是这种开销并不会增加每个请求:如果您有一个元素发送到Web服务,你有开销+一个元素的构造,如果你有1000个元素发送到Web服务,你有+ 1000元素构造的开销。 开销发生在XML请求被格式化为特定的操作,但请求中的每个单独的参数元素格式相同。
如果你坚持可重复的,短的突发数据(比如500个元素),速度应该是可以接受的。
我想这里的主要问题是如何比较RPC和SOAP。
它们通过使用存根操作的对象以及返回的原始/复杂数据types来实现相同的通信抽象方法,而不必真正知道如何在底层处理这一切。
我总是更喜欢(JSON-)RPC,因为
- 它是轻量级的
- 那里有所有编程语言的很多很好的实现
- 学习/使用/创build很简单
- 它很快(特别是使用JSON)
尽pipe有理由应该使用SOAP,也就是说,如果您需要命名参数,而不是依赖于正确的顺序
从这个stackoverflow 问题得到一些更多的细节