代码之家  ›  专栏  ›  技术社区  ›  GrayWizardx

计算Web服务下载的吞吐量

  •  2
  • GrayWizardx  · 技术社区  · 15 年前

    我有一个客户机-服务器应用程序,它为客户机请求的数据交换XML文档。实际上,用户输入一些搜索约束(要匹配的属性),客户端与两个系统通信以获取数据(一些数据来自数据库,另一些数据来自文件服务器)。

    从文件服务器返回的数据(存档数据的文件)比从服务器返回的元数据要大得多,相应地需要更多的时间来执行。

    用户要求我提供一些指标,说明下载存档数据所需的时间和下载速度(下载后)。

    客户机服务器与异步I/O和许多线程通信,因此我不能仅使用启动/停止计时器来完成此任务。

    我当前的实现工作如下:

    1. 记录当前刻度(这是一个长时间运行的进程,因此刻度分辨率很好)
    2. 异步地将请求传递给webservice。
    3. ---等待---
    4. 获取当前刻度
    5. 获取返回文档的大小(soap信封中没有考虑到一些开销,但我认为这是可以的)
    6. 速率=(文档大小/1024)/(结束刻度-开始刻度)*刻度/秒(我让TimeSpan对象执行此操作)

    起初,我认为这个方法是可以的,但是我有用户报告说,小样本的速率比大样本的速率低得多,而且在一次执行中速率变化很大。

    有没有更好的方法来计算这个比率,从而更容易免疫?对于较大的归档文件来说,这个速率会更高,这是有道理的,但是在测试中,我看到它比文件大小高10-40倍,这是没有意义的。

    1 回复  |  直到 15 年前
        1
  •  2
  •   Oren Trutner    15 年前

    该问题中测量的吞吐量假设传输时间是同质的。不是这样。会话开始时会有一个设置开销,包括TCP 3路握手和生成结果所需的服务器时间。一旦安装完成,其余的主要由网络吞吐量控制。

    对于大型有效负载,设置时间只是整个传输时间的一小部分,因此计算的吞吐量接近您的预期。对于小负载,测量的时间主要是设置时间!因此,计算出的吞吐量可以按数量级减少。

    你能做什么?找到从公式中删除设置组件的方法。

    1. 如果您可以在数据开始到达时收到通知,那么您可以在那里开始计时。这应该适用于除最短响应以外的所有响应(其中内容适合于单个网络数据包)。

    2. 或者,让服务器在发送响应之前附加一个时间戳。你可以用它作为开始时间,注意调整机器之间的时钟差。