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

Luc*_*ado 12 java architecture apache performance tomcat

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

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

Pas*_*ent 10

关于纯粹的速度,我建议阅读神话或事实:应该总是在Apache Tomcat前面使用Apache httpd来提高性能?博客文章.让我部分引用它:

简短的回答是,这是一个神话.更长的答案是,在Tomcat 3时代,根据情况,有一些事实.但是,对于今天使用的Tomcat版本(5.5.x和6.0.x),由于纯粹的性能原因,不需要使用httpd.Tomcat现在支持本机/ APR连接器,它使用相同的本机库(Apache Portable Runtime-APR)作为低级I/O的httpd,因此可以实现与httpd类似的性能.在提供静态内容时,与httpd相比,使用Tomcat时会产生更多的开销,但差异非常小,在生产系统中不太可能引人注意.

...

由Tomcat用户邮件列表中的常规Christopher Schultz执行的性能测试使用了更广泛的文件大小,并且在我看来提供了更好的结果.他的测试结果如下图所示.

替代文字

这些结果更符合预期,尽管有一些有趣的注意事项:

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

...

虽然静态内容的原始性能可能不是使用httpd的好理由,但是有很多理由可以解释为什么您可能希望将httpd与Tomcat一起使用.最常见的原因是为两个或多个Tomcat实例提供负载平衡.httpd不是唯一的选择 - 硬件负载平衡器或其他反向代理可以使用 - 但它是系统管理员的一个流行选择,因为他们中的许多人已经熟悉httpd.我将在以后的文章中更多地使用httpd作为负载均衡器.

...

非常值得一读.

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


Col*_*ert 3

当您在 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 之间进行选择时,速度不应被视为一个因素


资源 :