哪个应用程序容器更适合Docker容器?

时间:2017-02-06 18:12:42

标签: docker jboss7.x tomcat8

我们未来的架构是向码头/微服务迈进。目前我们正在使用JBoss EAP 6.4(有可能升级到EAP 7)和Tomcat。

据我所知,JEE容器对于微服务环境来说太重(慢,内存更多,维护更高等)。然而,有人告诉我,EAP 7速度快,重量轻,可用于开发微服务。对于Docker /微服务,您在决定EAP 7与Tomcat 8时的输入是什么?将考虑成本和速度。

2 个答案:

答案 0 :(得分:10)

EAP7与Tomcat 8是一个多年回答hereherehere的古老问题。

Tomcat只是一个Web容器,其中EAP7是一个应用程序服务器,提供所有Java EE 7功能,如持久性,消息传递,Web服务,安全性,管理等.EAP7有两个配置文件 - Web Profile和Full Profile。 Web Profile是一个非常简洁的版本,仅包含构建Web应用程序通常所需的相关实现。正如您所期望的那样,完整档案包含了平台的全部荣耀。因此,使用EAP 7 Web Profile可以帮助您减少膨胀。

使用Tomcat,您将不得不使用类似Spring的东西来提供相同的功能,并将所有相关的JAR打包到您的应用程序中。

当您启动一个全新的项目并同时拥有Java EE或Spring资源时,这些讨论通常很有用。以下是您可以考虑使用EAP7的原因:

  • 您已使用EAP 6.4。迁移到EAP 7将是无缝的。使用Docker只是一种不同的应用程序打包方式。您现有的所有监控,群集和日志记录都将继续有效。如果你要使用Tomcat,那么你将不得不学习Spring的做事方式。如果你有时间和资源并愿意尝试,你也可以走这条路。但想想你想从中获得什么?
  • EAP 7针对容器和云部署进行了优化。特别是,它可以作为OpenShift的服务使用,所以你知道它可以工作OOTB。
  • EAP 7将在延迟和吞吐量方面提供比EAP 6.4更好的性能提升。请阅读https://access.redhat.com/articles/2607521了解详情。

您也可以考虑TomEE。它们提供与Tomcat集成的Java EE堆栈。

另一个选项,如@Federico建议,考虑使用WildFly Swarm。然后,您可以真正开始定制您想要的Java EE平台的哪些部分。您的部署模型使用的是JAR文件。

对于使用Docker的打包,它们都提供基本映像,您需要将应用程序捆绑在其中。以下是将Docker镜像用于微服务的几个重要注意事项:

  • Docker镜像的大小:容器可能意外死亡,或者编排框架可能决定在不同的主机上重新安排它。更大的图像尺寸下载需要更长的时间。这意味着您感知的服务启动时间将更多地用于更大的图像。这也意味着动态扩展应用程序需要更长时间才能生效。
  • 图像的启动时间:下载图像后,容器可能会快速启动,但应用程序“准备好”需要多长时间?

作为个人注释,我对Java EE堆栈比Tomcat / Spring更熟悉,WildFly仍然是最受欢迎的应用服务器。

答案 1 :(得分:3)

除了使用传统的应用程序服务器之外,您还可以品尝到不同风格的Java EE,称为微容器。

Java EE只是一组标准。 API规范中的标准结果,然后每个人都可以自由地实现规范。应用程序服务器(AS)主要是此功能的微调集合。这些API没有任何理由被赋予生命。这些代表项目中常用的功能。应用程序服务器可以被视为一个"策划集"这些功能。这种方法有许多优点 - AS有很多用户,因此它经过了长时间的测试。自行连接功能可能会导致错误。

无论如何,一个新的时代已经到来,在Docker中,应用程序依赖于它。在许多情况下,不再需要具有准备好为应用程序提供所有功能的完整应用程序服务器。过去,应用程序服务器并不确切知道部署的应用程序需要哪些服务。因此,所有内容都捆绑在一起。像WildFly这样的一些更具创新性的AS只实例化了所需的服务。此外,还有一些Java EE配置文件可以稍微简化整体Application Server。

现在,我们通常将应用程序与它的依赖项(JDK,库,AS)一起发布到Docker中 - 或者我们正在那里前进。因此,努力捆绑恰当的数量是一个合理的选择。但是,它是一个很大的但是#34;对AS的功能的需求仍然是相关的。基于标准和共同努力开发通用功能仍然是个好主意。它似乎不再是将其作为一个大包分发的选项,可能会使大多数API处于非活动状态。这项努力有许多名称,无论是微型容器,uberjar创造者......

Java EE服务器如此轻巧,使用其他任何东西都是值得怀疑的。 * Spring Boot不是基于Java EE,在“入门”指南中的默认配置中,Tomcat是在内部使用的。

关键是,您的Java EE应用程序应该作为独立的Java EE应用程序开发。用&#34包装它就足够了#34;功能被委托给这些微解决方案。至少在我看来,这是正确的方法。这样,您将保持与完整AS和微解决方案的兼容性。包含所有依赖项的uber-jar可以在构建过程中或之后创建。

WildFly Swarm或Payara Micro能够扫描"应用程序,仅运行所需的服务。对于实际应用程序,生产中的内存占用量可低至100 MB - 适用于实际应用程序。这可能就是你想要的。如果你需要Spring,Spring Boot可以做类似的事情。但是,根据我的经验,Spring Boot是much more heavyweight并且内存比现代Java EE还要大,因为它内部显然有Spring,所以如果你在内存消耗方面是seeking lightweigtness,那么试试Java EE,特别是WildFly Swarm(或纯WildFly)和Payara Micro。那些是我最喜欢的AS,它们可以非常非常小。我想说WildFly Swarm更容易入手,Payara micro需要更多阅读,但提供有趣的功能。两者都可以作为包装器 - 你可以在构建阶段之后用它们包装你当前的项目,不需要改变任何东西。

Payara Micro即使provides Docker images也准备好了!正如您所看到的,Java EE已经成熟并准备进入Docker的土地:)

一个非常好的和可靠的资源是Adam Bien,例如在他的Java EE micro/nanoservices video中。看看。