Azure 为团队提供了许多用于构建和部署 Java 应用程序的选项。 本文介绍 Azure 上的 Java 主流方案,并提供高级规划建议和注意事项。
Apache®、Apache Kafka、Apache Struts、Apache Tomcat 和火焰徽标是 Apache Software Foundation 在美国和/或其他国家/地区的商标或注册商标。 使用这些标记并不暗示获得 Apache Software Foundation 的认可。
平台
在为 Java 应用程序选择云方案之前,请确定其平台。 大多数 Java 应用程序使用以下平台之一:
Spring Boot JAR 应用程序
Spring Boot JAR 应用程序通常直接从命令行调用。 它们处理 Web 请求。 这些应用程序不依赖于应用程序服务器来处理 HTTP 请求,而是直接将 HTTP 通信和其他依赖项合并到应用程序包中。 此类应用程序通常使用框架(如 Spring Boot、Dropwizard、Micronaut、MicroProfile 和 Vert.x)生成。
这些应用程序会打包成带 .jar 扩展的存档(称为 JAR 文件)。
Spring Cloud 应用程序
微服务架构样式是一种将单个应用程序开发为一套小型服务的方法。 每个服务在其自己的进程中运行,并使用轻量级机制(通常是 HTTP 资源 API)进行通信。 这些服务是围绕业务功能构建的。
自动化部署机制独立部署这些微服务。 这些服务可能使用不同的编程语言编写,并使用不同的数据存储技术,应对其进行最低限度的集中管理。 此类服务通常使用框架(如 Spring Cloud)构建。
这些服务作为 JAR 文件打包到多个应用程序中。
Web 应用程序
Web 应用程序在 servlet 容器中运行。 某些 Web 应用程序直接使用 servlet API,而其他应用程序则使用其他框架来封装 servlet API,例如 Apache Struts、Spring MVC、JavaServer Faces 等。
Web 应用程序会打包成带 .war 扩展的存档(称为 WAR 文件)。
Jakarta EE 应用程序
Jakarta Enterprise Edition (Jakarta EE) 应用程序可以包含 Web 应用程序的部分、全部或不包含任何元素。 它们还可能包含并使用 Jakarta EE 规范定义的多个其他组件。 Jakarta EE 应用程序以前称为 Java EE 应用程序或 J2EE 应用程序。
Jakarta EE 应用程序可以打包为 WAR 文件,也可以打包为带 .ear 扩展的存档,称为 EAR 文件。
Jakarta EE 应用程序必须部署到符合 Jakarta EE 要求的应用程序服务器上。 示例包括 WebLogic、WebSphere、WildFly、GlassFish 和 Payara。
仅依赖于 Jakarta EE 规范提供的功能的应用程序可以从一个合规的应用程序服务器迁移到另一个合规的应用程序服务器。 如果应用程序依赖于特定的应用程序服务器,则可能需要选择一个允许你托管该应用程序服务器的 Azure 服务目标。
平台选项
使用下表识别适用于你的应用程序类型的潜在平台。
Azure Spring Apps | 应用服务 Java SE | 应用服务 Tomcat | 应用服务 JBoss EAP | Azure Container Apps | AKS | 虚拟机 | |
---|---|---|---|---|---|---|---|
Spring Boot/JAR 应用程序 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Spring Cloud 应用程序 | ✔ | ✔ | ✔ | ✔ | |||
Web 应用程序 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
Jakarta EE 应用程序 | ✔ | ✔ | ✔ | ||||
Azure 区域可用性 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 |
Azure Kubernetes 服务 (AKS) 和虚拟机支持所有应用程序类型,但它们要求你的团队承担更多的责任,如下一部分所示。
可支持性
除了平台选择,新式 Java 应用程序可能还有其他可支持性需求,例如:
批处理作业或计划的作业
某些应用程序会短暂运行,运行特定的工作负载,然后退出,而不是等待请求或用户输入。 此类作业有时需运行一次,有时则需定期按计划的时间间隔运行。 在本地,通常从服务器的 cron 表调用此类作业。
这些应用程序打包为 JAR 文件。
注意
如果应用程序使用计划程序(如 Spring Batch 或 Quartz)来运行计划任务,强烈建议你在应用程序外部运行此类任务。 如果应用程序在云中扩展为多个实例,则同一作业可运行多次。 如果计划机制使用主机的本地时区,则跨区域缩放应用程序时可能会出现意外行为。
虚拟网络集成
在虚拟网络中部署 Java 应用程序后,它对虚拟网络外部的服务有出站依赖关系。 为了进行管理和操作,项目必须有权访问某些端口和完全限定的域名。 使用 Azure 虚拟网络可在无法通过 Internet 路由的网络中放置多个 Azure 资源。 虚拟网络集成功能允许应用程序访问虚拟网络中的资源,或通过虚拟网络访问资源。 虚拟网络集成不允许以私密方式访问应用程序。
无服务器开发模型
无服务器是一种云原生开发模型,使开发人员无需管理服务器即可生成和运行应用程序。 借助无服务器应用程序,云服务提供商自动预配、缩放和管理运行代码所需的基础结构。 服务器仍存在于无服务器模型中。 它们从应用程序开发中抽象出来。
容器化
容器化是将软件代码及其所有必要的组件(如库、框架和其他依赖项)打包在一起。 应用程序隔离在其自己的容器中。
CI/CD
持续集成和持续交付 (CI/CD) 是一种通过在应用程序开发阶段引入自动化来频繁向客户交付应用程序的方法。 CI/CD 中的主要概念是持续集成、持续交付和持续部署。 所有 Azure 选项都支持大多数 CI/CD 工具。 例如,可以使用 Azure Pipelines 或 Jenkins 等解决方案。
开源搜索引擎
搜索是任何应用程序的组成部分。 如果速度、性能和高可用性至关重要,则搜索 TB 级和 PB 级数据可能具有挑战性。 在 Azure 上托管 Java 应用程序时,请计划托管相关的 Solr 和 Elasticsearch 实例。 或者,考虑迁移到 Azure 认知搜索。
大数据工具
大数据工具可实现软件系统之间数据流的自动化。 它们支持可缩放、可靠且简化的数据路由图以及系统中介逻辑。 它们用于生成实时数据流管道和流应用程序。 了解 Azure 上的 Nifi 和 Apache Kafka 如何满足你的需求。
可支持性选项
使用下表识别适用于你的应用程序类型的潜在选项。 AKS 和虚拟机支持所有应用程序类型,但它们要求你的团队承担更多的责任。
Azure Spring Apps | 应用服务 Java SE | 应用服务 Tomcat | 应用服务 JBoss EAP | Azure Container Apps | AKS | 虚拟机 | |
---|---|---|---|---|---|---|---|
批处理作业或计划的作业 | ✔ | ✔ | ✔ | ✔ | |||
虚拟网络集成 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
无服务器 | ✔ | ✔ | ✔ | ✔ | |||
容器化 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure 区域可用性 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 |
另请参阅此决策树。
下载此图的 Visio 文件。
生成或迁移 Java 应用程序
若要生成或迁移 Java 应用程序,请确定应用程序的 Java 平台。 一些热门平台包括 Java SE、Jakarta EE 和 MicroProfile。
Java SE
Java 平台 Standard Edition (Java SE) 是一个计算平台,用于开发和部署桌面和服务器环境的可移植代码。 基于 Java SE 构建的热门项目包括 Spring Boot、Spring Cloud、Spring Framework 和 Apache Tomcat。
Jakarta EE
Jakarta EE 是云原生企业 Java 开放源代码未来。 它是一组规范,通过分布式计算和 Web 服务等企业功能扩展 Java SE。 Jakarta EE 应用程序运行引用运行时。 这些运行时可以是微服务或应用程序服务器。 它们处理应用程序所部署组件的事务、安全性、可伸缩性、并发性和管理。
MicroProfile
MicroProfile 项目提供了一系列规范,旨在帮助开发人员生成企业 Java 云原生微服务。 Quarkus 和 Open Liberty 是 MicroProfile 的常用实现。
生成或迁移摘要
下表按应用程序类型和 Azure 服务提供生成或迁移信息。
类型 | Java SE | MicroProfile | JarkartaSE | |
---|---|---|---|---|
虚拟机 | IaaS | ✔ | ✔ | ✔ |
VMware Tanzu | IaaS | ✔ | ||
Azure Kubernetes 服务 | 容器 | ✔ | ✔ | ✔ |
Red Hat OpenShift | 容器 | ✔ | ✔ | ✔ |
Azure 容器应用 | PaaS | ✔ | ✔ | |
JBoss EAP | PaaS 应用服务 | ✔ | ✔ | |
Apache Tomcat | PaaS 应用服务 | ✔ | ||
Java SE | PaaS 应用服务 | ✔ | ✔ | |
Azure Spring Apps | PaaS | ✔ |
作者
本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。
主要作者:
- Asir Vedamuthu Selvasingh | 首席项目经理
- Hang Wang | 产品经理
- Xinyi Zhang | 首席 PM 经理
若要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。