在生产环境中运行Tomcat

16

我目前在开发和生产中使用Tomcat6作为Web容器。

我听说Tomcat不是用于生产环境的最佳性能Web容器,这是真的吗?

Tomcat在性能和内存管理方面是否足够用于生产环境?

我们的系统有大约100至400个用户。

对我来说,更重要的是Web应用程序的编写方式和所涉及的操作类型。

即使一个Tomcat实例的性能存在问题,也可以将其集群化吗?

谢谢。


2
什么是“聚类”?这是一个有几种解释的术语。 - skaffman
3
这个问题更适合在ServerFault上提问,因为它涉及系统管理员而不是编程(至少我是这样理解的)。 - Andrzej Doyle
Tomcat是最佳容器之一。 - Mudassir
也许你需要研究一下反向代理。虽然Tomcat已经足够好了,但如果你想要扩展你的应用程序,那么无论你使用什么容器,负载均衡都是必要的。 - vinothkr
1
@skaffman 如果你每天都在处理Tomcat或其他Java应用服务器,你就会知道"集群Tomcat"是什么意思。这已经非常具体了。它意味着对应用服务器节点进行集群,而不是虚拟机节点或其他东西。 - Daniel Baktiar
4个回答

16

我目前在开发和生产中使用Tomcat6作为Web容器。

我听说Tomcat不是最适合生产环境的Web容器。这是真的吗?

这取决于你怎么看待它。Tomcat可以表现得非常好,在生产环境中被广泛使用,具有最大的用户基础。一些商业应用服务器在幕后使用Tomcat,甚至不告诉你。

当然,你不应该将Tomcat的原始性能与经过良好调整的Web容器相比较。Tomcat可以进行调整以获得比其原始状态更好的性能。例如,你可以搜索“tomcat production”来了解人们如何在真实的生产环境中管理它,并获得许多建议、技巧等。

Tomcat在性能和内存管理方面是否足够用于生产环境?

是的,它足够用了。当你需要更多时,有很多供应商提供商业版本的Tomcat,包括监控和工具,帮助你在生产环境中维护你的应用程序。

我们的系统有大约100到400个用户。

Tomcat肯定可以处理更多用户。取决于你的应用程序/系统的性质,你可能需要多个Tomcat实例。在真正的生产环境中,将Tomcat进行集群是明智的选择。

对我来说,更重要的是Web应用程序的编写方式和Web应用程序内部的操作类型。

这只是一半的真相。

我认为,良好的架构和框架也会在你决定如何构建框架堆栈之前,在你准备对Tomcat进行集群时节省大量时间。因此,你需要有关于Web容器应用程序如何工作、你的框架如何在集群环境中处理事务以及它们如何集群的基本知识。

例如,以下问题可能会出现:

  • 在多个JVM实例中进行内存缓存
  • 会话存储(内存、数据库、文件存储)及其复制

对于集群化Tomcat而言,这并不是一项简单的任务,如果您没有正确地设计框架,那么在以后将集群化Tomcat纳入其中将会变得非常困难。

即使一个Tomcat实例的性能存在问题,是否有可能将其集群化?

是的,可以将Tomcat集群化。您设计应用程序的方式决定了您的应用程序是否易于集群化,或者会更加复杂。这个问题可能不仅限于Tomcat,而是适用于一般的应用服务器。

您可能需要考虑一些问题:

  • 您在(HTTP) session中存储了哪些数据
  • 在哪里存储session
  • 保持session连接
  • 使用Web服务器应用程序负载平衡反向代理,例如Apache Web Server + mod_proxy/mod_jk、nginx、Varnish
  • 使用哪些Tomcat连接器(Blocking IO,NIO,APR)

还有一些其他问题,但我认为以上几点已经足够开始处理。


7

100-400个用户是相对较小的部署。我曾经帮助客户部署Tomcat解决方案,其注册用户数或并发用户数要大得多(在数百万范围内)。我甚至认为您的部署不需要集群。

将Tomcat服务器集群化非常简单。在Tomcat服务器前面放置一个负载均衡器。使用会话粘滞配置负载均衡器即可创建出一个非常好的Tomcat集群。有些客户希望当一个Tomcat实例失败时进行会话故障转移,使用户可以自动路由到第二个实例而不丢失会话数据。但我认为这对于您的部署来说已经过度了。实际上,由于定期维护引起的停机时间会远高于系统故障时间。我的Tomcat服务器运行了数月时间,并且只需要在进行重大代码发布时才需要关闭。但如果需要的话,有开源软件包支持会话集群。

说起来,大多数J2EE应用程序性能问题都源于应用程序本身,而不是Tomcat服务器。以下是我在调试客户系统性能时遇到的最常见的J2EE应用程序性能问题。希望这可以帮到您。


1
一个系统中100-400个用户可能并不适用于其他系统,比如你的部署。这可能是一个“非常繁重”的使用情况,并且可能需要进行集群。我会相信当前生产系统的实际度量和统计数据,而不是仅适用于其他部署的经验法则。 - Daniel Baktiar

3

您说得对,首先考虑功能,然后考虑性能。即使只有一个Tomcat实例,也足以为这些用户提供良好的服务。而且,是的,可以对Tomcat进行集群


0

Tomcat只是一个Web服务器。如果你想要集群化你的Web应用程序,你应该查看你的系统设置,并将HTTP调用发送到其他具有相同代码的服务器上,以卸载你的主服务器。

这可以通过拥有一个不依赖于你的Web服务器或应用程序的集群动态环境来实现。

至于Tomcat的性能,我不会担心它,而是要担心你的代码,因为90%的瓶颈都在那里。


11
Tomcat不仅仅是一个Web服务器。 - Michael-O

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接