【问题标题】:How expensive is it to call a web service?调用 Web 服务的成本是多少?
【发布时间】:2014-01-17 14:47:35
【问题描述】:

我在 google 上进行了相当不错的搜索,但没有任何内容可以回答我的问题。由于我对 Web 服务知之甚少(只是开始使用它们,而不是在过去几个月内构建它们),我想知道我是否应该可以按照自己的意愿(在合理范围内)频繁调用特定的 Web 服务,还是应该我建立了一次完成的请求。

举个例子,我的应用程序旨在进行工作更新,对于某些类型的更新将调用网络服务。似乎我的选择是我可以在需要 Web 服务的更新应用程序中创建一个数据表,并将整个数据表传递给 Web 服务,然后在 Web 服务中编写一个方法来处理数据表的更新。或者,我可以遍历整个更新表(其中包括需要 Web 服务的更新之外的其他更新)并在需要更新时调用 Web 服务。

目前,我似乎将每个更新而不是数据表传递给 Web 服务会更简单。

就传递给 Web 服务的数据而言,每次更新都将包含少量数据(3 个字符串,最长 120 个字符)。就更新数量而言,可能不会超过 200 个。

【问题讨论】:

  • 我在想,为什么我从来没有这样想过?

标签: c# web-services


【解决方案1】:

我想知道我是否应该可以(在合理范围内)尽可能频繁地调用特定的 Web 服务,或者我应该一次性建立请求。

无论是否使用 Web 服务,通过网络路由的任何呼叫都将受益于构建多个请求,因此它们可以在一次往返中得到处理。在您的情况下,构建一个代表所有更新的对象将是一个明显的赢家,尤其是在连接速度较慢的设置中。

当您通过网络拨打电话时,这些事情需要在客户端与服务器通信时发生(同样,无论是否使用 Web 服务):

  1. 与您的通话相关的数据会在客户端上序列化
  2. 序列化数据发送到服务器
  3. 服务器反序列化数据
  4. 服务器处理数据,产生响应
  5. 服务器序列化响应
  6. 服务器将序列化的响应发送回客户端
  7. 响应在客户端反序列化

第 2 步和第 6 步通常会由于网络延迟而导致延迟。对于简单的操作,延迟通常会主导调用的时间。

用于高频交易的最快网络的延迟以微秒为单位;在常规的情况下,它以毫秒为单位。如果您以 1 毫秒的延迟(每次往返 2 毫秒)在网络上一个接一个地发送 100 个包,那么仅在网络延迟上就浪费了 200 毫秒!这五分之一秒,按照当今 CPU 的标准来说是很多时间。如果您可以简单地通过重组请求来消除它,那么这是一个很好的理由。

【讨论】:

  • 我怀疑会是这样。我只是想知道 Web 服务是否会对性能产生很大影响。其他更新在另一个数据库上完成,我只需调用一个存储过程并传入每个更新(无法控制存储过程),这不会花费很长时间。我想知道这与每次调用 Web 服务相比如何。
  • @sr28 Web 服务不会在常规分布式调用之上附加巨大的性能损失。顺便说一句,由于您在谈论存储过程,所以这里的类比非常方便:创建一些存储过程的唯一目的是避免多次往返 RDBMS 服务器 - 本质上,与捆绑 Web 服务调用的原因相同,即使您的 RDBMS 通常与您的应用服务器位于同一本地网络上。与捆绑请求相关的复杂性的小幅增加带来了性能的显着提升。
  • 知道 Web 服务不会带来巨大的性能损失,这很方便。但是,根据您的建议,我已经沿着数据表路线进行,这对我来说在记录更新成功/失败方面可能有点复杂,但您已经让我相信它的好处。
【解决方案2】:

与细粒度的远程接口相比,您通常应该更喜欢粗粒度的远程接口。

考虑为每个调用添加 10 毫秒的网络延迟 - 100 次更新的延迟是多少?

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 2010-11-15
    • 2010-09-10
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2016-10-14
    相关资源
    最近更新 更多