2009-12-19 112 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