為什麼這篇tomcat翻譯鄉民發文收入到精華區:因為在tomcat翻譯這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者PsMonkey (痞子軍團團長)看板java標題[翻譯] Tomcat 前端該用 httpd ...
原文網址:
http://www.tomcatexpert.com/blog/2010/03/24/
myth-or-truth-one-should-always-use-apache-httpd-front-
apache-tomcat-improve-perform
blog 版:
http://blog.dontcareabout.us/2012/12/tomcat-httpd.html
簡單地說,不用。要仔細講的話,在 Tomcat 3 的年代是有一些真實成份在。
不過以現今使用的 5.5.x 以及 6.0.x 來說,
實在沒有必要因為單純效能的理由來使用 httpd。
Tomcat 現在支援 native / APR 的 connector,
使用與 httpd 相同的 native library(Apache Protable Runtime APR)
來處理低階 I/O,因此可以達到與 httpd 差不多的效能。
當處理靜態內容時,Tomcat 是比 httpd 多一小點兒的負荷量,
但實在太小了以至於在 production system 上很難注意到差異。
如果你研究 httpd 與 Tomcat 的效能議題,
你會找到各種覆載與效能的 benchmark,結果也不盡相同。
一個常被引用的結果證明 Tomcat 的純 Java connector 始終比 httpd 快。
這個異常的結果剛好與期待相反:
httpd 應該比 Tomcat 的 pure Java connector 快上很多才對。
這可能是所使用的檔案大小導致的結果。
Tomcat 會預設把小的靜態檔案 cache 在記憶體中,
這可以提供顯著的效能提昇。
httpd 在預設情況下沒有作這件事。
這很明確地證實 benchmark 的定義會影響結果。
Christopher Schultz(Tomcat mailing list 的常客)
以一個較大範圍的檔案大小進行這個測試(譯註:連結已經失效),
在我看來這個測試比較好一點。結果顯示在下面這張圖表中:
http://www.tomcatexpert.com/sites/default/files/uploads/all/
mthomas-blog-perf-graph.JPG
這更符合預期了,不過有一些有趣的重點要注意:
* Apache httpd 與 Coyote APR / native 的效能表現在同一個水準
* Coyote NIO 只落後 httpd 與 Coyote APR / native 一點
* 看起來似乎 sendfile 的效益有一個極限在。
有可能是硬體限制,不過值得進一步關注。
我已經把這個加到我的待辦事項中。
* 對於小於 10KB 的檔案,Tomcat 有顯著的效能提昇。
任何效能測試的細部結果都會隨著一些因素而改變,
像是使用何種硬體、同時有多少 request、keep-alive 與 cache 的使用。
在特定的測試中,這些因素會改變結果,
不過大多數的效能測試結果會保持一樣:
* httpd 與 Coyote APR / native 有差不多的效能
* Coyote NIO 比 Coyote APR / native 差一點
(在用 SSL 的情況下會差更多)
* Coyote BIO 通常是最差的。
要設定出最佳的效能,這會隨著 application 的不同而不同。
一個 application 的最佳設定取決於 resource 的大小、
動態 / 靜態內容的比例、目前的使用者數量、這些使用者的使用模式...... 等等。
一般來說,可以透過增加 cacheMaxSize 值、
增加可處理 request 的 connector thread 數量(使用 maxThreads)、
開啟 keep-alive(用 maxKeepAliveRequests)來增加效能,
不過這些都會增加資源的使用量。
每個不同的 application 得在效能與資源使用量之間作取捨。
另外要注意的是:Tomcat 中沒有「讓它跑的比較快」的魔法設定。
如果你的 application 花 15 秒來產生一個 request,
Tomcat 沒辦法改進些甚嘛。
你必須監控你的 application 以了解為甚麼 request 會花這麼久的時間,
然後適當地調整你的程式碼。
雖然單純從效能觀點,沒有什麼好理由去用 httpd,
不過還是有其他論點支持 Tomcat 應該搭配 httpd。
最常見的原因是為兩個以上的 Tomcat 提供 load balance。
httpd 並不是唯一的選擇,也可以用硬體的 load balance 或是其他 reverse proxy,
不過系統管理者仍然會選擇他們已經很熟的 httpd。
我未來會寫更多用 httpd 當 load balancer 的文章。
有需要支援 Java 以外的技術,也是 Tomcat 與 httpd 一起使用的原因。
Tomcat 可以支援 PHP 與 Perl,不過在 httpd 當中支援度較好。
因此,對於需要混合技術的網站,httpd 可以用來當前端的 web server,
將 request 導向 mod_php、mod_fastcgi、mod_proxy_http(給 Tomcat)
或是其他的 module。
另一個這樣用的原因:httpd 可以將 Windows 的身份認證整合進來。
有 Tomcat 整合 Window 身份認證的方式,在更廣泛地使用之後,
這讓是不是用 httpd 變得不那麼重要。
然後,這仍是讓 httpd 搭配 Tomcat 使用的一個常見原因。
總而言之,有充分的理由讓 httpd 搭配 Tomcat 使用,
不過靜態內容的效能並不是其中之一。
如果你僅僅是為了加強靜態內容的效能而用 httpd,
那我建議你看一下給 Apache Tomcat 使用的 Coyote APR / native connector。
--
錢鍾書: 說出來的話
http://www.psmonkey.org
比不上不說出來的話
Java 版 cookcomic 版
只影射著說不出來的話
and more......
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.25.13.53