2011-02-09 86 views
1

我最近在一次採訪中被問到了這個問題。這是關於網絡服務器設計的開放式問題。 Herez問題的要點。提高網絡服務器的性能

「隊列通常成爲web服務器等應用程序的瓶頸,你將對線程處理類,線程池和隊列做出什麼樣的改變來改善瓶頸?」

我指出了像 這樣的措施1.線程池管理 2.在隊列中使用緩衝區和數據包。

但是面試官不太滿意。我應該提及的所有設計措施是什麼?顯然它是一個開放式的問題,所以答案不必依賴於像Spring,J2EE等底層技術。

如果有好的服務器設計教程,請分享它。

回答

1

我無法抗拒張貼本:

http://www.engineerguy.com/videos/video-lines.htm

與隊列的主要問題是,它服務員更深下來的隊列。所以設計必須如此之快,以至於隊列永不填滿,或者必須考慮隊列填充。另見bufferbloat吉姆·格蒂斯最近事情已經張貼:

http://gettys.wordpress.com/category/bufferbloat/

凡在現代路由器IP數據包的緩衝導致TCP會嚴重錯誤(和它的影響非常間接排隊Web服務器內部理論以及)。

0

有一種稱爲套接字輪的設計模式,用於高級Web服務器中的處理隊列。

+0

你能發佈一個鏈接嗎?在谷歌搜索套接字輪設計模式導致任意結果。 – Neo 2011-02-09 06:57:04

+0

這裏是鏈接 - http://www.javaspecialists.eu/archive/Issue023.html – 2011-02-09 07:39:41

1

隨機答案:

  1. 實際測量整個系統的性能,隨機更改代碼之前,找出問題所在。 FTW!

  2. 使用IO完成端口(Windows),「epoll」或「kevent」(Linux)。

  3. 考慮有不同的優先級隊列。對於已知具有快速響應時間的查詢,請將它們放入一個隊列中。對於需要更長和更昂貴的響應(例如長數據庫事務)的查詢,將這些請求放入不同的隊列中。考慮使用快速查詢給予隊列更多的優先權。 (請考慮:在雜貨店快速結賬,購買12件或更少的商品)。

0

我會增加隊列和線程的數量來降低延遲。 (並且每個隊列總是有一個線程)