2010-09-09 33 views
12

在舊版本的tomcat(如3.2)中,您可以找到推薦以在apache Web服務器中提供靜態內容,並將動態內容留給tomcat本身。 在新版本的tomcat文檔中,即使在mod_jk配置教程中也找不到任何對此練習的引用。 所以我想知道。在web服務器中提供靜態內容並且在tomcat中的動態內容仍然是一個很好的性能練習?

Tomcat的靜態內容還不夠好嗎?如果我將我的部署模式更改爲單獨的靜態和動態內容,我將獲得性能改進?

回答

2

當您在Apache httpd和Tomcat之間進行選擇時,您不應該考慮速度。

什麼是JK(或AJP)?

AJP是一個有線協議。它是HTTP協議的優化版本,允許獨立的Web服務器(如Apache)與Tomcat進行通信。 歷史上,,Apache在服務靜態內容方面比Tomcat快得多。這個想法是讓Apache在可能的時候提供靜態內容,但是代理向Tomcat發送對Tomcat相關內容的請求。

而且

速度。 Apache在提供靜態內容方面比Tomcat更快。但是除非你有一個高流量網站,否則這一點是沒有用的。但在某些情況下,tomcat可能比Apache httpd更快。所以基準你的網站。 當使用正確的連接器(啓用sendFile的APR)時,Tomcat可以以httpd速度執行。


資源的Apache httpd和Tomcat的之間進行選擇時的速度不應該被考慮的因素:

9

對於純粹的速度,我建議閱讀Myth or truth: One should always use Apache httpd in front of Apache Tomcat to improve performance?博客文章。讓我部分地引用它:

簡短的回答是,這是一個 神話。更長的回答是,回到 在Tomcat 3的日子裏有一些 的真相,這取決於 的情況。但是,對於今天使用的Tomcat版本(5.5.x 和6.0.x),則不需要使用httpd,因爲純粹表現爲 的原因。 Tomcat現在支持 native/APR連接器,該連接器使用 相同的本機庫(Apache 便攜式運行時APR)作爲httpd作爲 低級I/O,因此 可以達到與httpd類似的性能。 當提供靜態內容有 非常輕微時 使用Tomcat相比的httpd更多的開銷,但 差異非常小,他們是 不太可能明顯在 生產系統。

...

performance testing由克里斯托弗·舒爾茨進行 ,定期對 的Tomcat用戶郵件列表,使用 更大範圍的文件大小,並提供 - 在我看來 - 更好的結果。他的測試的 結果顯示在下面的 圖中。

alt text

這些結果與預期線 得多,雖然有 幾個有趣的點要注意:

  • 的Apache httpd和狼APR /本地顯示出類似的性能 水平。
  • Coyote NIO不太落後於httpd和Coyote APR/native。
  • 似乎有限制的發送文件的有用性。這可能是硬件限制,但值得 進一步關注。我已將此添加到 我的待辦事項列表中。
  • 對於小文件大小(小於〜10KiB),靜態文件緩存 Tomcat提供了顯着的性能提升。

...

雖然靜態 內容的原始性能可能不是一個很好的理由 使用的httpd,有許多好的 的原因,你可能需要使用 的httpd和Tomcat。最常見的原因是爲兩個或多個Tomcat實例提供負載平衡。 httpd的 不是那麼這個唯一的選擇 - 硬件負載均衡器或其他 反向代理可以使用 - 但它 是一個流行的選擇之間系統 管理員,因爲其中許多是 已經熟悉的httpd。我將 在未來的文章中詳細介紹如何使用httpd作爲 負載均衡器。

...

非常值得讀。

這就是說,使用Tomcat前面的Web服務器來提供靜態內容,顯然會爲動態內容釋放更多的能量,因此是我最喜歡的選擇。

0

對於所有「/ static/*」內容,Tomcat中的servlet過濾器可能會添加具有max-age值的Cache-Control標頭。因此,如果相同的客戶端經常回來(Intranet),Tomcat就足夠了,因爲靜態內容將在瀏覽器緩存中,並且與動態內容相比很少向服務器請求。

此外,對於擴展網絡帶寬,靜態內容的Cache-Control可能是一個好主意。

(這只是我自己的經驗努力KISS)