2016-05-03 9 views
1

私はブログの記事でこの質問に出会った。インターンシップのインタビューでMozillaから尋ねられました。 (Blog Post静的なWebサーバーのリソース使用

あなたは、ギガビットネットワークに接続され、あなたの近代的な、 マルチコアサーバのローカルのファイルシステムをオフ静的なファイルを提供する を設定されているHTTPサーバ(nginxのは、Apacheなど)を実行しています。いくつかのクライアント は、できるだけ速く同じ4kbの静的ファイルを要求し始めます。何が システムリソースが最初に枯渇すると思いますか?

a。 CPU
b。ディスク/ I/O
c。メモリ
d。ネットワーク
e。その他

私によれば、Nginx/Apacheを使用している現代のマシンでは、このどれも使い尽くされませんでした。 Webサーバーはそのような小さなファイルをキャッシュしておらず、そのまま提供し続けますか?また、繰り返し要求されると、Not-Modifiedヘッダーを簡単に送信できます。

Apacheの場合、スレッドを生成して複数のクライアントを処理するため、CPUは使い果たされますが、クライアントの「一握り」は問題になりません。

私は他人がこの質問について何を言わなければならないか知りたかったのです。

+1

ネットワークに続いてCPU。 – ardhitama

答えて

1

reeeeeeeeally依存します。 4kは、すべてのキャッシュやバッファーをデフォルト設定と同じくらい魅力的にする魔法のサイズなので、簡単に(そして速く)回ることができます。 Webサーバはファイル全体ではなくファイルハンドルで動作するため、ここでのメモリは制限要因ではありません。この場合、私は彼らがそれを記憶に残しておくと思いますが、それは通常、最大でも4kb * (num_cores + 1)になるワーカーインスタンスごとに1つのファイルになりますが、これは実際問題ではありません。

メモリまたはディスクスピードのいずれかが問題であると主張できます。しかし、以前のものは、のようなメソッドが適切に構成されていて、ゼロコピーのアプローチを可能にしていて、無視できませんでした。後者は、ファイルのコピーがメモリにロードされると、時間の経過とともに償却されます。

最後に、インターフェイスとCPUがあります。全体的に見て、CPU時間はネットワーク時間よりもずっと安い傾向があるので、NICがCPUの前のボトルネックになると思います。

質問は、クライアントの場所に少し不明です。彼らが同じGbEネットワークに接続されている場合、彼らは確かに彼らの要求であなたのNICを飽和させる力を持つことができます。そうでない場合、一部の仲介者が制限要因になる可能性があります。

ここでは、私たちのネットワーク内にあって、8レーン(これはかなり標準的なIMHOです)で接続されたシングルホーム10GbE NICを持っていたとしましょう:PCIe 3.0 x8は7,877 MB/sで指定されます。 Core i7 3770は5GT/sのバス速度を持ち、8レーンでおよそ8GB/sに変換されます。他のI/O集約的な作業負荷がないと仮定すると、このCPUは容易にNICを飽和させる可能性があります。

要約:他のものよりも先にCPU飽和前のネットワーク/ NIC飽和。

+0

HTTPオーバーヘッドのためにネットワークが飽和しますか?私は、しばらくしてから、同じファイルを何度も要求しているクライアントに対してNot-Modifiedレスポンスを送信し始めますが、それでもHTTPレスポンスが必要だとします。 –

+0

いいえ、私は生トラフィックを想定していました。 304は、質問の精神ではないと感じた「If-None-Match」または「If-Modified-Since」ヘッダーを送信するのにクライアントが十分にスマートであることを要求します。私はこれがアプリケーションプロトコル機能を持​​たない最大スループットに関するものだと思います。さらに、NICは依然として304応答で飽和している可能性があります。 – DaSourcerer

関連する問題