【发布时间】:2010-09-11 12:23:12
【问题描述】:
关于使用 XML-RPC 或 REST 解决方案的简单性的争论很容易理解,也很难争论。
我还经常听到一些争论,即 SOAP 开销的增加可能会显着影响使用的带宽,甚至可能会影响延迟。我想看看量化影响的测试结果。有人知道此类信息的良好来源吗?
【问题讨论】:
标签: performance web-services rest soap xml-rpc
关于使用 XML-RPC 或 REST 解决方案的简单性的争论很容易理解,也很难争论。
我还经常听到一些争论,即 SOAP 开销的增加可能会显着影响使用的带宽,甚至可能会影响延迟。我想看看量化影响的测试结果。有人知道此类信息的良好来源吗?
【问题讨论】:
标签: performance web-services rest soap xml-rpc
REST 作为协议没有定义任何形式的消息信封,而 SOAP 确实有这个标准。
因此,尝试比较两者有点简单,它们是苹果对橘子。
也就是说,一个 SOAP 信封(减去数据)只有几 k,因此只要您通过 SOAP 和 REST 检索序列化对象,速度上应该不会有任何明显差异。
【讨论】:
REST !== XML over HTTP。
我不知道基准测试问题的任何答案,但是,我对 SOAP 格式的了解是肯定的,它确实有开销,但是每个请求的开销不会增加:如果您有一个元素发送到Web 服务,你有开销 + 一个元素构造,如果你有 1000 个元素发送到 Web 服务,你有开销 + 1000 个元素构造。当 XML 请求针对特定操作进行格式化时会产生开销,但请求中每个单独的参数元素的格式都相同。
如果您坚持使用可重复的短突发数据(例如 500 个元素),那么速度应该是可以接受的。
【讨论】:
【讨论】:
如果您收到大量基于 INFORMATION(get* 调用类型)的 SOAP 操作,目前您无法缓存它们。但是,如果您要使用 REST 实现这些相同的操作,则可能会缓存数据(取决于您的业务上下文),如上所述。由于 SOAP 使用 POST 进行操作,它无法在服务器端缓存信息。
【讨论】:
SOAP 和任何其他使用 XML 的协议通常会使您的消息膨胀很多 - 这可能是也可能不是问题,具体取决于上下文。
像 JSON 这样的东西会更紧凑,序列化/反序列化可能更快 - 但不要出于这个原因专门使用它。做任何你当时认为有意义的事情,如果有问题就改变它。
通常使用 HTTP 的任何东西(除非它重用 HTTP 1.1 keepalive 连接,许多实现不这样做)为每个请求启动一个新的 TCP 连接;这非常糟糕,尤其是在高延迟链接上。 HTTPS 更糟糕。如果您有很多从一个发送者到一个接收者的短请求,请考虑如何消除这些开销。
将 HTTP 用于任何类型的 RPC(无论是 SOAP 还是其他)总是会产生这种开销。其他 RPC 协议通常允许您保持连接打开。
【讨论】:
SOAP 肯定更慢。有效负载明显较大,组装、传输、解析、验证和处理速度较慢。
【讨论】:
已经完成了一些关于此的研究,您可能会发现这些研究提供了丰富的信息。请参阅以下内容:
MSDN Forums 上还有一个(有点过时的)有趣的性能对话。
简而言之,这些来源中的大多数似乎都同意 SOAP 和 REST 对于通用数据的性能大致相同。然而,一些结果似乎表明,对于二进制数据,REST 实际上可能性能较差。有关更多详细信息,请参阅我链接的论坛中的链接。
【讨论】:
我想这里的主要问题是如何比较 RPC 和 SOAP。
它们都提供相同的通信抽象方法,通过使用您操作的存根对象和返回的原始/复杂数据类型,而无需真正知道这一切是如何在底层处理的。
我总是更喜欢 (JSON-)RPC,因为
虽然您应该使用 SOAP 是有原因的,例如,如果您需要命名参数而不是依赖于它们的正确顺序
您可以从这个 stackoverflow question 获得更多详细信息
【讨论】: