2016-05-03 65 views
1

我在博客文章中遇到了這個問題。 Mozilla在他們的實習訪問中被問到。 (Blog Post靜態網絡服務器的資源使用情況

您正在運行配置 爲靜態文件關閉連接到千兆網絡的現代化, 多核服務器的本地文件系統中一個HTTP服務器(nginx的,阿帕奇等)。少數客戶端 開始儘可能快地請求相同的4kb靜態文件。系統資源您認爲首先會耗盡嗎?

a。 b。CPU
b。磁盤/ I/O
c。內存
d。網絡
e。其他

根據我的說法,這些都不會在現代機器上用Nginx/Apache耗盡。 Web服務器不會緩存這樣一個小文件,只是繼續提供服務。另外,對於重複請求,它可以輕鬆發送Not-Modified頭。

在Apache中的情況下,我想,由於它通過產生線程處理多個客戶端,CPU將首先被耗盡,但對於客戶的「一小撮」,這並不重要。

我想知道別人怎麼說這個問題。

+1

網絡然後CPU。 – ardhitama

回答

1

它取決於。 4k的魔法尺寸可以像所有的緩存和緩存一樣好,因此它很容易(和快速)通過。內存不是一個限制因素,因爲Web服務器將在文件句柄上運行,而不是整個文件。在這種情況下,我會假設他們保持正確的內存,但這將是每個工人實例的一個文件,通常最多會降至4kb * (num_cores + 1),這不是一個真正的問題。

有人會認爲無論是內存 - 或diskspeed是一個問題。但是當等方法配置正確時,前一種方法可以忽略,從而實現零拷貝方法。一旦文件的一個副本被加載到內存中,後者會隨着時間的推移進行分期償還。

最後,還有的接口和CPU(一個或多個)。總的來說,CPU時間往往比網絡時間便宜很多,所以我希望NIC在CPU之前就已經成爲瓶頸了 - 如果有的話。

的問題是在客戶端的位置有點非特異性。如果他們連接到同一個GbE網絡,他們確實有能力使他們的NIC滿足他們的請求。如果沒有,一些中介可能成爲限制因素。

現在讓我們假設那些客戶端在我們的網絡中,我們在這裏有一個單宿主萬兆以太網卡,通過8條通道(這是相當標準的恕我直言)連接:PCIe 3.0 x8指定爲7,877 MB/s。 A Core i7 3770的總線速度爲5GT/s,在8條通道上轉換爲大約8 GB/s。假設沒有其他I/O密集型工作負載,該CPU可能很容易飽和NIC。

因此,在總結:CPU飽和之前,網絡/ NIC飽和先天下之憂。

+0

由於HTTP開銷,網絡是否會飽和?我假設在一段時間後,服務器將開始向請求同一文件的客戶反覆發送Not-Modified響應,但即使這樣也需要HTTP響應。 –

+0

不,我假設原始流量。 304會要求客戶足夠聰明,以發送'If-None-Match'或'If-Modified-Since'頭,我覺得這些頭不符合問題的精神。我認爲這主要是關於沒有任何應用協議功能的最大吞吐量。此外,NIC可能仍然飽和304個響應。 – DaSourcerer

相關問題