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

哪个应用程序容器更适合Docker容器?,docker,jboss7.x,tomcat8,Docker,Jboss7.x,Tomcat8,我们未来的架构将朝docker/micro服务方向发展。目前我们正在使用JBoss EAP 6.4(有可能升级到EAP 7)和Tomcat 据我所知,JEE容器对于微服务环境来说太重(速度慢、内存多、维护高等)。然而,有人告诉我EAP7速度快、重量轻,可以用于开发微服务。在决定docker/MicroService的EAP 7和Tomcat 8时,您有什么意见?成本和速度将是考虑因素。EAP7与Tomcat 8是一个古老的问题,已被多次回答,而且 Tomcat只是一个web容器,其中EAP7是一

我们未来的架构将朝docker/micro服务方向发展。目前我们正在使用JBoss EAP 6.4(有可能升级到EAP 7)和Tomcat


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

EAP7与Tomcat 8是一个古老的问题,已被多次回答,而且

Tomcat只是一个web容器,其中EAP7是一个应用服务器,提供所有Java EE 7功能,如持久性、消息传递、web服务、安全性、管理等。EAP7有两个配置文件—web配置文件和完整配置文件。Web概要文件是更精简的版本,只包含构建Web应用程序通常需要的相关实现。正如您所料,完整的概要文件包含了平台的全部荣耀。因此,使用EAP7Web配置文件将帮助您减少相当多的膨胀

有了Tomcat,您必须使用Spring之类的工具来提供等效的功能,并将所有相关的JAR打包到应用程序中

当您开始一个全新的项目并且手头有JavaEE或Spring资源时,这些讨论通常会很有帮助。下面是你可以考虑使用EAP7:

的原因。
  • 您已经在使用EAP 6.4。迁移到EAP 7将是无缝的。使用Docker只是打包应用程序的另一种方式。所有现有的监视、集群和日志记录都将继续工作。如果你要和Tomcat一起去,那么你必须学会用Spring的方式做事。如果你有时间和资源并且愿意尝试,你也可以走这条路。但是想想你想从中得到什么
  • EAP 7针对容器和云部署进行了优化。特别是,它可以作为OpenShift的一项服务使用,因此您知道它可以在OOTB中工作
  • 与EAP 6.4相比,EAP 7将在延迟和吞吐量方面提供可观的性能提升。阅读更多细节
你也可以考虑一下。它们提供了与Tomcat集成的JavaEE堆栈

另一种选择,正如费德里克推荐的,考虑使用。然后,您可以真正开始定制您想要的JavaEE平台的哪些部分。您的部署模型使用的是JAR文件

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

  • Docker映像的大小:容器可能意外死亡,或者业务流程框架可能决定在其他主机上重新调度它。图像尺寸越大,下载时间就越长。这意味着,为了获得更大的形象,您感知到的服务启动时间会更长。这也意味着应用程序的动态扩展需要更长的时间才能有效
  • 映像的启动时间:映像下载后,容器可能会快速启动,但应用程序“准备就绪”需要多长时间

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

除了使用传统的应用程序服务器(其实没有那么重)之外,您还可以品尝到不同风格的Java EE,称为微容器

JavaEE只是一组标准。标准产生了API规范,每个人都可以自由地实现该规范。应用服务器(AS)主要是这一功能的微调集合。这些API并没有无缘无故地投入使用。这些表示项目中常用的功能。应用服务器可以被视为这些功能的“策划集”。这种方法有很多优点——正如有很多用户一样,因此它经过了很好的测试。自行连接功能可能会导致错误

无论如何,一个新的时代已经到来,有了Docker,应用程序就有了它的依赖性。在许多情况下,不再需要一个成熟的应用服务器,该服务器具有可供应用程序使用的所有功能。在过去,应用服务器并不确切知道部署的应用程序将需要哪些服务。因此,一切都被捆绑在一起。一些更具创新性的示例仅实例化了所需的服务。此外,还有一些JavaEE概要文件,它们稍微简化了monolith应用服务器

现在,我们通常在Docker中随应用程序及其依赖项(JDK、库、AS)一起发布应用程序,或者我们正朝着这个方向前进。因此,努力捆绑正确数量的数据是一个合乎逻辑的选择。但是,这是一个“大但是”,对AS功能的需求仍然是相关的。基于标准和共同努力开发通用功能仍然是一个好主意。它似乎不再是一个将其作为一个大包分发的选项,可能会使大多数API处于非活动状态。这项工作有很多名字,无论是微容器还是uberjar创建者

  • *
有一些JavaEE服务器非常轻巧,所以很难使用其他任何东西。 *Spring引导不是基于JavaEE的,在入门指南中提供的默认配置中,Tomcat在内部使用

关键点是,您的JavaEE应用程序应该作为独立的JavaEE应用程序开发。用“刚好够用”的功能包装它就委托给了这些微型解决方案。至少在我看来,这是一条正确的道路。这样,您将保留与成熟AS和micro解决方案的兼容性。uber jar,包含所有依赖项