2

XMLドキュメントをクライアントから要求されたデータと交換するクライアントサーバーアプリケーションがあります。基本的に、ユーザーはいくつかの検索制約(一致する属性)を入力し、クライアントは2つのシステムと通信してデータを取得します(データベースからのデータとファイルサーバーからのデータ)。

ファイルサーバーから返されるデータ(アーカイブされたデータのファイル)は、サーバーから返されるメタデータよりもかなり大きく、それに応じて実行に時間がかかります。

ユーザーから、アーカイブデータのダウンロードにかかる時間とダウンロード速度(ダウンロード後)に関するいくつかのメトリックを提供するように求められました。

クライアントサーバーは非同期I/Oおよび多数のスレッドと通信するため、これを実現するために開始/停止タイマーを使用することはできません。

私の現在の実装は次のように機能します。

  1. 現在のティックを記録します(これは長時間実行されるプロセスであるため、ティックの解決は問題ありません)
  2. リクエストを非同期的にWebサービスに渡します。
  3. - - 待って - -
  4. 現在のティックを取得します
  5. 返されたドキュメントのサイズを取得します(SOAPエンベロープからは考慮されていないオーバーヘッドがありますが、これは問題ないと思います)
  6. レート=(ドキュメントサイズ/ 1024)/(終了ティック-開始ティック)*ティック/秒(タイムスパンオブジェクトにこれを実行させます)

最初はこの方法で問題ないと思いましたが、ユーザーからは、大きなサンプルよりも小さなサンプルの方がレートがはるかに低く、1回の実行でレートが大きく異なると報告されています。

これに影響されにくいこのレートを計算するためのより良い方法はありますか?アーカイブが大きいほどレートが高くなることは理にかなっていますが、テストでは、ファイルのサイズよりも10〜40倍高いことがわかります。これは意味がありません。

4

1 に答える 1

2

質問で測定されたスループットは、転送時間が均一であることを前提としています。そうではない。セッションの開始時に、TCP3ウェイハンドシェイクと結果を生成するために必要なサーバー時間を含むセットアップコストが発生します。セットアップが完了すると、残りは主にネットワークスループットによって支配されます。

大きなペイロードの場合、セットアップ時間は全体の転送時間のごく一部であるため、計算されたスループットは予想どおりになります。小さなペイロードの場合、測定される時間は主にセットアップ時間です。その結果、計算されたスループットが桁違いにずれる可能性があります。

あなたは何ができますか?方程式からセットアップコンポーネントを削除する方法を見つけます。

  1. データの到着が開始されたときに通知を受け取ることができる場合は、そこでティックカウントを開始できます。これは、最短の応答(コンテンツが単一のネットワークパケット内に収まる場合)を除くすべての応答で機能するはずです。

  2. または、サーバーに、応答を送信する直前にタイムスタンプを添付してもらいます。マシン間のクロックの違いを調整するように注意しながら、それを開始時間として使用できます。

于 2009-12-19T08:55:40.520 に答える