代码之家  ›  专栏  ›  技术社区  ›  Koekiebox

在生产环境中运行Tomcat[关闭]

  •  12
  • Koekiebox  · 技术社区  · 15 年前

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

    我听说Tomcat不是生产环境中性能最好的Web容器。这是真的吗?

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

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

    对我来说,更多的是关于Web应用程序是如何编写的,以及Web应用程序内部的操作类型。

    即使在一个Tomcat实例上性能有问题, 有可能对Tomcat进行集群吗?

    谢谢。

    4 回复  |  直到 14 年前
        1
  •  14
  •   Daniel Baktiar    15 年前

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

    我听说Tomcat不是生产环境中性能最好的Web容器。这是真的吗?

    好吧,还是要看你怎么看。Tomcat的性能非常好,它在生产中无处不在,拥有最大的用户群。一些商业应用服务器在没有告诉您的情况下使用Tomcat。

    当然,您不应该将Tomcat开箱即用的性能与经过良好调整的web容器进行比较。Tomcat可以被调整为比开箱即用状态更好的性能。例如,你可以在google上搜索“tomcat production”,看看人们是如何在实际生产中管理它的,并获得很多建议、技巧等。

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

    是的,是的。当您需要更多时,有许多供应商提供了Tomcat的商业版本,包括帮助您在生产中维护应用程序的监视和检测。

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

    Tomcat肯定能处理的不止这些。根据应用程序/系统的性质,您可能需要多个Tomcat实例。在实际的生产环境中,对Tomcat进行集群是明智的。

    对我来说,更多的是关于Web应用程序是如何编写的,以及Web应用程序内部的操作类型。

    半真半假。

    我相信良好的架构和框架也会为您节省大量时间来集群Tomcat。因此,在决定如何放置框架堆栈之前,您需要对web容器应用程序的工作方式、框架如何在集群环境中处理事物以及它们是如何集群的有一个基本的了解。

    例如,问题可能来自:

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

    对Tomcat进行集群并不是一件简单的任务,如果不正确地放置框架,将很难在以后合并集群的Tomcat。

    即使在一个Tomcat实例上性能有问题,是否可以对Tomcat进行集群?

    是的,可以对Tomcat进行集群。您设计应用程序的方式决定了您的应用程序是可以轻松地进行集群,还是更复杂地进行集群。这个问题可能不是Tomcat特有的,而是一般应用服务器特有的。

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

    • 在(HTTP)会话中存储什么数据
    • 会话的存储位置
    • 保持活动会话
    • 使用web服务器应用程序负载平衡反向代理,例如Apache web服务器+mod_proxy/mod_jk、nginx、Varnish
    • 要使用哪些Tomcat连接器(阻塞IO、NIO、APR)

    还有其他一些问题,但我想你可以从这些开始。

        2
  •  6
  •   Jonathan    15 年前

    100-400用户是一个相对较小的部署。我帮助客户使用更大的注册用户群(数百万)或并发用户部署Tomcat解决方案。我甚至不认为您的部署需要集群。

    集群Tomcat服务器非常简单。在Tomcat服务器前面放置一个负载平衡器。使用会话粘性配置负载平衡器。你会有一个非常好的Tomcat集群。有些客户机希望在一个Tomcat实例失败时进行会话故障转移,并且用户可以自动路由到第二个实例,而不会丢失会话数据。我认为这对你的部署来说太过分了。实际上,定期维护所导致的停机时间将远远高于系统故障。我的Tomcat服务器运行了几个月,只需要在主要代码发布时关闭。但是如果需要的话,有开源包支持会话集群。

    说到这里,大多数J2EE应用程序性能问题都源于应用程序本身,而不是Tomcat服务器。这是 Top J2EE Application Performance Problems 这是我在测试客户机系统性能时遇到的最多的问题。希望能帮上忙。

        3
  •  3
  •   Boris Pavlović    15 年前

    你说得对,首先考虑功能,然后考虑性能。即使一个Tomcat实例也能提供足够多的用户。是的, clustering Tomcat 是可能的。

        4
  •  1
  •   Luca Matteis    15 年前

    Tomcat只是一个web服务器。如果你想集群你的web应用,你应该看看你的系统设置,并发送HTTP调用到其他服务器相同的代码所在,以卸载你的主服务器。

    这可以通过使用不依赖于web服务器或应用程序的集群动态环境来实现。

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