在Web服务器中提供静态内容和tomcat中的动态内容仍然是一个很好的性能实践?

时间:2010-09-09 13:42:38

标签: java performance architecture tomcat apache

在旧版本的tomcat(如3.2)中,您可以找到recomendation以在apache Web服务器中提供静态内容,并将动态内容保留给tomcat本身。 在新版本的tomcat文档中,即使在mod_jk配置教程中也找不到任何对此实践的引用。 所以我很纳闷。

tomcat还不足以提供静态内容吗?如果我将部署架构更改为分离静态和动态内容,我会有性能改进吗?

3 个答案:

答案 0 :(得分: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现在支持了   本机/ APR连接器使用   相同的本机库(Apache   Portable Runtime-APR)作为httpd的   低级I / O因此可以   实现与httpd类似的性能。   当提供静态内容时   时间稍长一些   使用Tomcat比较httpd但是   差异是如此之小   不太可能引人注目的   生产系统。

     

...

     

performance testing已执行   克里斯托弗舒尔茨,一个常客   Tomcat用户邮件列表,用过   更广泛的文件大小和提供    - 在我看来 - 更好的结果。该   他的测试结果显示在   下图。

     

alt text

     

这些结果更符合要求   随着预期,尽管有   有几点值得注意:

     
      
  • Apache httpd和Coyote APR / native表现出类似的表现   水平。
  •   
  • Coyote NIO与httpd和Coyote APR / native相差不远。
  •   
  • 似乎对sendfile的用途有限制。这可能是一个   硬件限制,但值得   进一步关注。我已将此添加到   我的待办事项列表。
  •   
  • 对于小文件大小(小于~10KiB)的静态文件缓存   Tomcat提供了重要意义   性能提升。
  •   
     

...

     

虽然原始性能为静态   内容可能不是一个很好的理由   使用httpd,还有一些不错   你可能想要使用的原因   用Tomcat httpd。最常见的   原因是提供负载平衡   两个或多个Tomcat实例。的httpd   这不是唯一的选择 -   硬件负载平衡器或其他   可以使用反向代理 - 但它   是系统中的热门选择   管理员,因为他们中的很多人   已经熟悉httpd了。生病   写下更多关于使用httpd作为   负载平衡器在以后的文章中。

     

...

值得一读。

话虽如此,使用Tomcat前面的Web服务器来提供静态内容显然会为动态内容释放更多功能,因此是我最喜欢的选择。

答案 1 :(得分:2)

在Apache httpd和Tomcat之间选择时,不应该考虑速度。

  

什么是JK(或AJP)?

     

AJP是一种有线协议。它是HTTP协议的优化版本,允许Apache等独立Web服务器与Tomcat通信。 历史性,Apache在提供静态内容方面比Tomcat快得多。我们的想法是让Apache尽可能地提供静态内容,但是将请求代理到Tomcat以获取与Tomcat相关的内容。

并且

  

速度。 Apache提供静态内容比Tomcat更快。但除非你有高流量站点,否则这一点毫无用处。但在某些情况下,tomcat可能比Apache httpd更快。所以基准您的网站。 当使用正确的连接器(启用了sendFile的APR)时,Tomcat可以以httpd速度执行。在Apache httpd和Tomcat

之间进行选择时,不应将速度视为一个因素

资源:

答案 2 :(得分:0)

对于所有“/ static / *”内容,Tomcat中的servlet过滤器可能会添加具有max-age值的Cache-Control标头。因此,如果相同的客户经常回来(Intranet),Tomcat就足够了,因为静态内容将在浏览器缓存中,并且与动态内容相比很少被问到服务器。

此外,静态内容的缓存控制对扩展网络带宽来说是一个好主意。

(这只是我自己的经历,努力去吻)