2009-12-19 116 views
2

我有一个客户端服务器应用程序,它为客户端请求的数据交换XML文档。本质上,用户输入一些搜索约束(要匹配的属性),客户端与两个系统进行通信以获取数据(来自数据库的一些数据和来自文件服务器的一些数据)。为Web服务计算吞吐量下载

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

用户要求我提供关于下载归档数据所需时间以及下载速度(下载后)的指标。

客户端服务器与异步I/O和众多线程进行通信,因此我不能只使用启动/停止计时器来完成此操作。

我目前实现将按这样:

  1. 记录当前蜱(这是一个长期运行的进程那么蜱分辨率是罚款)
  2. 手从请求到web服务Asyncronously。
  3. ---等待---
  4. 获取当前蜱
  5. 获取文档的大小返回(有一些开销不是从SOAP信封占但这是好的,我认为)
  6. Rate =(Document Size/1024)/(End Ticks - Start Ticks)* Ticks/Second(I let a timespan object do this)

起初我以为这种方法没问题,但我有用户报告小样本的比率比大样本的要低得多,并且在一次执行中费率变化很大。

有没有更好的方法来计算这个比率更容易受此影响?对于较大的档案来说,速度会更快,但在测试中,我认为它比文件大小高10-40倍,这是没有意义的。

回答

2

问题中测量的吞吐量假定传输时间是同质的。不是这样。会话开始时的安装成本包括TCP 3次握手和产生结果所需的服务器时间。一旦安装完成,其余部分主要由网络吞吐量决定。

对于大型有效载荷,建立时间只是整个传输时间的一小部分,因此计算吞吐量接近您的预期。对于小型有效载荷,测量的时间大多数是设置时间!结果,计算出的吞吐量可能会下降数量级。

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

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

  2. 另外,在服务器刚刚发送之前附加时间戳的响应。你可以用它作为开始时间,注意调整机器之间的任何时钟差异。

+0

传输的平均数据远大于100K,但小于100M(我知道范围很大)。由于我使用的是持久连接,我会假设建立时间被固定,也许这个假设是错误的。 – GrayWizardx 2009-12-19 18:50:39