打包和部署企业应用程序的现代替代方案?[已关闭]

2022-09-04 03:52:19

打包和部署服务器端java软件的现代替代方案是什么1)在异构环境中2)

我无法找到很多关于这个主题的连贯或最新的信息,但我有一些想法。我将开始

  1. 传统的应用程序服务器方法(JettyTomcat 等)
    • 将软件组装成文件并制作自己的配置和部署脚本,例如,使用izpackant脚本cargo或类似的东西。war
       
  2. 依靠集成平台,例如 fabric8servicemixfuse 等。
    • 似乎是一个不错的固执己见的方法。如果还没有使用其中一个,除了锁定之外,将应用程序重新滚动到这种格式需要一些工作。趋势不是要远离大型框架吗?
       
  3. 将应用程序文件捆绑到(企业存档)文件中warear
    • 需要一个成熟的java EE服务器,例如Wildeflyglassfish等。除非需要这种服务器的功能,否则它会给zip存档已经可以做的事情增加很多开销。
       
  4. 虚拟机:流浪汉Docker
    • Docker很好,但在Windows上,主机无论如何都需要在VM中运行。VM(无论是否流失)会产生性能开销,并且往往依赖于复杂的预配工具,如 puppetsalt
       
  5. 可运行的 jar,例如 Capsulemaven shade 插件One-JAR
    • Capsule看起来很棒,它就像一个可执行的,自解压的zip文件,它也运行应用程序。使用嵌入式码头,可以从一个可执行文件提供多个传统文件。war

第一个选项长期以来一直是我的参考方法,但需要大量的配置,安装脚本,这两者都因不同的环境(例如Linux,Windows)而异。

有哪些现代替代方案可以简化打包和部署?

1)想象一下SOA,比如微服务,RESTful通信等设置。
2)考虑到这一点,让我们排除PaaS提供商,如cloudbees,cloudfoundy等。他们应该有自己的主题。


答案 1

我建议阅读 The Twelve-Factor App 文档,该文档的灵感来自 Martin Fowler 的《企业应用程序架构模式》和《重构》一书。它建议如下:

  1. 每个应用应该有一个代码库(版本控制系统),并在不同的环境(开发、过渡、生产)中部署应用。
  2. 显式声明和隔离依赖项(永远不要依赖于系统范围的包或系统工具的隐式存在)。
  3. 配置(部署之间可能不同的所有内容)应存储在环境中,而不是存储在代码中。
  4. 应将后备服务(包括其他应用)视为附加资源,通过配置中存储的定位器/凭据进行访问。
  5. 构建、发布和运行阶段应严格分开。
  6. 应用应作为一个或多个无状态和无共享进程执行(状态不应存储在“粘性会话”中,而应存储在提供过期时间的数据存储中)。
  7. 应用应完全独立(通常向应用添加 Web 服务器库),通过端口绑定将 HTTP 导出为服务。
  8. 由于十二因素应用进程的可分区特性,应通过进程模型简单可靠地添加更多并发性
  9. 应用应通过实现快速启动和正常关机来处理可处置性
  10. 开发、过渡和生产环境应尽可能相似(开发/生产奇偶校验)。
  11. 应用应将日志视为事件流,从不关心其路由或存储。
  12. 管理进程应作为一次性进程运行。

还有James Lewis和Martin Fowler关于微服务的文章,其中陈述了上面列举的一些想法。

关于打包和部署,后一篇文章的建议是:

  1. 通过服务实现组件化

    应用(及其微服务)应作为进程外组件(而不是进程内库)实现,这些组件可以独立替换、升级和部署。组件通过使用显式远程调用机制提供更显式的组件接口。

  2. 围绕业务功能进行组织

    对于特定的业务领域,每个组件都应该围绕业务功能进行组织,并采用包括用户界面,持久存储和任何外部协作在内的软件的路栈实现。这种方法还允许跨团队项目在同一组件上协同工作(并在产品的整个生命周期内拥有该产品)。

  3. 智能端点和哑管道

    从微服务构建的应用应使用简单的 RESTish 协议进行编排。两种最常用的协议是带有资源API的HTTP请求 - 响应,以及通过哑总线(例如RabbitMQZeroMQ)的轻量级消息传递。

  4. 基础设施自动化

    构建、部署和操作微服务的运营复杂性可以通过持续交付或其前身持续集成的自动化来降低。


答案 2

如果您使用Maven,Tomcat Maven插件有一个目标,即创建一个可执行的JAR以及标准的WAR。您可以使用java -jar path_to.jar运行jar。这是一种运行应用程序而没有预先存在的Tomcat安装的有趣方式。检查:http://tomcat.apache.org/maven-plugin-2.2/executable-war-jar.html


推荐