私は、会社の複数の Web プロパティの QA を実行する新しいサービスに取り組んでおり、興味深いネットワーク同時実行の問題に遭遇しました。パフォーマンスを向上させるために、TPL を使用して、多数の URL のコレクションに基づいて HttpWebRequests を作成し、それらを並行して実行できるようにしています。ただし、ボトルネックがプロセスのどこにあるかを見つけることができないようです。
これまでの私の観察:
- TPL経由で最大約25〜30の並列スレッドを取得できます
- サービスの CPU が 5 ~ 6% 壊れることはありません (H/T の有無にかかわらず、1 ~ 4 コアで実行)
- NIC の使用率が 2 ~ 3% を超えることはありません
- 全体的なネットワーク トラフィックは影響を受けていないようです (他のユーザーは文句を言わず、同時に速度テストを実行しても大きな影響は見られません)。
- オフィス ネットワーク (15Mbps) とデータ センター (100+Mbps) のどちらで実行しても、速度はあまり変わりません。
- 1 つのホストから大量のページをダウンロードするのではなく、複数のホストから一度にダウンロードすることで、パフォーマンスが少し向上します。
考えられる問題点:
- CPU (コアまたはハードウェア スレッドの数)
- NIC
- 同時 HttpWebRequests の最大許容数
- LAN
- ワン
- ルーター/スイッチ/ロードバランサー
質問は次のとおりです。
明らかに、インターネット全体を数分でダウンロードする方法がありますが、このようなシナリオのどこにボトルネックがあり、それを克服するために何ができるかを知りたいと思っています.
補足として、現在、クロールにサードパーティのサービスを使用していますが、いくつかの点で制限があり、より柔軟にしたいと考えています. 矢の先端にある企業秘密のソースや毒についての何か... :)