Java Servlet 部署 - 嵌入式还是独立 - Tomcat/Jetty

9

我有几个Web应用程序部署到生产环境。我已经使用Tomcat作为我的Servlet引擎约10年了。我正在考虑从将war部署到Tomcat模式转移到嵌入式Jetty模式。

这些Web应用程序部署在多台服务器上,其中一些是水平扩展的(使用基于nginx IP哈希分区)。

我看到了一些优点:

  • 我可以为特定的Web应用程序配置我的Servlet引擎(而不是对运行多个不同Web应用程序的Tomcat进行通用配置)

  • 通过在同一主机上运行多个Jetty实例(配置为侦听不同的端口),更容易地水平扩展我的Web应用程序。我也可以使用Tomcat做到这一点(过去我曾在同一主机上运行多个Tomcat实例),但我已经转向使用Debian软件包(.deb存档)进行部署,使用此方法运行多个Tomcat不太容易。

  • 我的部署包(.deb)在构建时更加“完整”,即我不必确保Tomcat实例被正确配置。

和缺点:

  • 在服务器上运行更多的Servlet引擎实例意味着使用更多的资源

  • 我从未使用过Jetty。我不认为我的Web应用程序中有任何特定于Tomcat的内容,但我不确定。

我的主要关注点是Jetty将使用的资源量。如果我有一个运行4个Web应用程序的Tomcat实例,那么运行四个Jetty实例的资源(内存/处理器)差异将是多少?

这个问题可能太宽泛了,但我想知道是否有什么事情被忽视了,或者是否有人有从Tomcat转移到(嵌入式)Jetty的经验。


另外需要注意的是:运行多个Servlet进程意味着每个进程都有自己的端口。换句话说,独立的进程不能共享一个端口。 - three-cups
我认为Jetty最大的问题在于它提供了太多的选项!Tomcat只让你走一条路。而Jetty似乎让你想怎么做就怎么做。 - three-cups
我正在考虑编写一个通用的jetty启动脚本,它接受一个端口和一组webapp/context对。这似乎会给我最大的灵活性。也许已经有这样的脚本了?我要看看jetty 7发行版中的.../bin/jetty.sh。 - three-cups
似乎没有人知道。除了“相应地设置Java X”或在x、y、z容器中尝试并查看结果外,我找不到有关多实例CPU/内存使用的任何信息。猜测Tomcat每个实例可能需要至少128MB(Jetty则较少),但是,每个实例是否都有自己的虚拟机?对于JVM + X容器每个实例的内存占用量,互联网上缺乏信息,这让人感到惊讶。 - virtualeyes
3个回答

2

0

我之前也熟悉Tomcat,因此在我的新项目中尝试使用Jetty来学习它。

在企业环境中(拥有生产/测试/开发服务器),我会坚持使用Tomcat,主要是因为它可以帮助您将代码与配置文件分离(现在我正在设置将conf文件放在一个单独的jar中,因此当我从测试转移到生产时,他们不必手动更新我将传递给系统管理员的jars)。

另一个问题是Jetty的所有权似乎不久前已更改,寻找信息时通常会引用老版本。

除此之外,使用Jetty与Tomcat并没有太大区别。我不得不查找文档以找到所有内容的位置,但结构基本类似于Tomcat(至少在我看过的最后一个版本中,我还没有尝试过任何太复杂的内容)。


0

我认为没有直接的答案;

我可能不完全理解“.deb”部分,因为我不是Debian迷 :)

我喜欢拥有一个Tomcat实例,其中包含多个配置(即CATALINA_HOME文件夹),您可以在其中指定应用程序和运行端口,这样您就可以始终将所有配置分开,并在需要时更改Tomcat实例。

另请参阅相关帖子: Jetty:嵌入还是不嵌入?


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