将 Java 应用程序迁移到 Azure
本文概述了将 Java 应用程序迁移到 Azure 的推荐策略。
此迁移指南旨在介绍 Azure 方案的主流 Java,并提供高级规划建议和注意事项。 如果想与 Microsoft Azure 上的 Java 团队讨论特定的 Java 应用迁移方案,请填写以下调查问卷,我们的代表将与你联系。
确定应用程序类型
在为 Java 应用程序选择云目标之前,需确定其应用程序类型。 大多数 Java 应用程序都是以下类型之一:
- Spring 应用程序:
- Java EE 应用程序
- Web 应用程序
- 批处理作业/计划的作业
将在下面各部分介绍这些类型。
Spring Boot/JAR 应用程序
许多更新的应用程序都是从命令行直接调用。 这些应用程序仍处理 Web 请求,但不依赖于应用程序服务器来提供 HTTP 请求处理,而是将 HTTP 通信和所有其他依赖项直接合并到应用程序包中。 此类应用程序通常使用框架(如 Spring Boot、Dropwizard、Micronaut、MicroProfile、Vert.x 等)生成。
这些应用程序会打包成带 .jar 扩展的存档(JAR 文件)。
使用 Spring Cloud 中间件模块的 Spring 应用程序
微服务架构样式是一种将单个应用程序开发为一套小型服务的方法。 每个服务在其自己的进程中运行,并使用轻量级机制(通常是 HTTP 资源 API)进行通信。 这些服务围绕业务功能构建,可通过完全自动化的部署机制进行独立部署。 这些服务可能是使用不同的编程语言编写的,并采用了不同的数据存储技术,应对其进行最低限度的集中管理。 此类服务通常使用框架(如 Spring Cloud)构建。
这些服务会打包成多个带 .jar 扩展的应用程序(JAR 文件)。
Java EE 应用程序
Java EE 应用程序(也称为 J2EE 应用程序,而最新的叫法是 Jakarta EE 应用程序)可以包含 Web 应用程序的部分、全部或不包含任何元素。 根据 Jakarta EE 规范的定义,这些应用程序还可以包含和使用更多组件。
Java EE 应用程序可打包为带 .ear 扩展的存档(EAR 文件),或带 .war 扩展的存档(WAR 文件)。
Java EE 应用程序必须部署到兼容 Java EE 的应用服务器上(如 Oracle WebLogic Server、IBM WebSphere、JBoss EAP、GlassFish、Payara 等)。
仅依赖于 Java EE 规范提供的功能的应用程序(即,与应用服务器无关的应用程序)可以从一个合规的应用程序服务器迁移到另一个合规的应用程序服务器。 如果应用程序依赖于特定的应用程序服务器(依赖于应用服务器),则可能需要选择一个允许你托管该应用程序服务器的 Azure 服务目标。
Web 应用程序
Web 应用程序在 Servlet 容器中运行。 其中一些应用程序直接使用 servlet API,而许多应用程序则使用封装了 servlet API 的其他框架,如 Apache Struts、Spring MVC、JavaServer Faces (JSF) 等。
Web 应用程序会打包成带 .war 扩展的存档(WAR 文件)。
批处理作业/计划的作业
某些应用程序适用于短暂运行,执行特定工作负荷,然后退出,而不是等待请求或用户输入。 此类作业有时需运行一次,有时则需定期按计划的时间间隔运行。 在本地,通常从服务器的 crontab 调用此类作业。
这些应用程序会打包成带 .jar 扩展的存档(JAR 文件)。
注意
如果应用程序使用计划程序(如 Spring Batch 或 Quartz)来运行计划任务,强烈建议你将此类任务构造为在应用程序外部运行。 如果应用程序在云中扩展为多个实例,则同一作业会运行多次。 此外,如果计划机制使用主机的本地时区,则在跨区域缩放应用程序时可能会遇到意外的行为。
选择针对的 Azure 服务目标
以下部分说明哪些服务目标满足应用程序要求,以及它们涉及的责任。
托管选项网格
使用以下网格可识别适用于你的应用程序类型的潜在目标。 如你所见,Azure Kubernetes 服务 (AKS) 和 Azure 虚拟机支持所有应用程序类型,但需要你的团队承担更多责任,如下一部分所示。
目标 → 应用程序类型 ↓ |
应用 服务 Java SE |
应用 服务 Tomcat |
应用 服务 JBoss EAP |
Azure Container Apps | AKS | 虚拟 机 |
---|---|---|---|---|---|---|
Spring Boot/JAR 应用程序 | ✔ | ✔ | ✔ | ✔ | ||
Spring Cloud 应用程序 | ✔ | ✔ | ✔ | ✔ | ✔ | |
Web 应用程序 (WAR) | ✔ | ✔ | ✔ | ✔ | ✔ | |
Java EE 应用程序 (WAR | EAR) | ✔ | ✔ | ✔ | ✔ | ||
商业应用程序服务器 (如 Oracle WebLogic Server 或 IBM WebSphere) |
✔ | ✔ | ✔ | |||
应用程序服务器级群集分析 | ✔ | ✔ | ✔ | |||
批处理作业/计划的作业 | ✔ | ✔ | ✔ | |||
VNet 集成/混合连接 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
Azure 区域可用性 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 | 详细信息 |
持续责任网格
请使用以下网格来了解迁移后每个目标施加给团队的责任。
以 表示的任务完全或主要由 Azure 管理。 你的团队始终负责 所示的任务。 建议你通过一个稳定且高度自动化的过程来履行所有此类责任。
注意
这并不是一个详尽的责任列表。
目标 → 任务 ↓ |
应用 服务 |
Azure 容器 应用 |
AKS | 虚拟 机 |
---|---|---|---|---|
更新库 (包括漏洞修正) |
👉 | 👉 | 👉 | 👉 |
更新应用程序服务器 (包括漏洞修正) |
👉 | 👉 | 👉 | |
更新 Java 运行时 (包括漏洞修正) |
👉 | 👉 | 👉 | |
触发 Kubernetes 更新 (由 Azure 通过手动触发器执行) |
空值 | 👉 | 空值 | |
灾难恢复 | 👉 | 👉 | ||
协调非后向兼容的 Kubernetes API 变更 | 空值 | 👉 | 👉 | 空值 |
更新容器基础映像 (包括漏洞修正) |
空值 | 👉 | 👉 | 空值 |
更新操作系统 (包括漏洞修正) |
1 | 👉 | ||
检测和重启失败的实例 | 👉 | |||
针对更新实施清空和滚动重启 | 👉 | |||
基础结构管理 | 👉 | 👉 | 👉 | |
监控和警报管理 | 👉 | 👉 | 👉 | 👉 |
1 某些安全更新可能需要重启节点,而节点不会自动重启。 有关详细信息,请参阅将安全更新和内核更新应用于 Azure Kubernetes 服务 (AKS) 中的 Linux 节点。
如果将 servlet 容器(如 Spring Boot)作为应用程序的一部分进行部署,则应将其视为一个库。因此,这始终是你的责任。
确保本地连接性
如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅将本地网络连接到 Azure。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。
在开始任何迁移之前,应完成此操作。
清点当前容量和资源使用情况
记录当前生产服务器的硬件,以及平均和峰值请求计数和资源使用情况。 将需要此信息来预配服务目标中的资源。
迁移指南
请使用以下网格,按应用程序类型和针对的 Azure 服务目标来查找迁移指南。
Java 应用程序
请使用以下行查找 Java 应用程序类型和列,找出将托管应用程序的 Azure 服务目标。
要将 JBoss EAP 应用迁移到应用程序服务上的 Tomcat,请先将 Java EE 应用转换为在 Tomcat 上运行的 Java Web 应用 (servlet),然后按照下面提供的指南操作。
目标 → 应用程序类型 ↓ |
应用 服务 Java SE |
应用 服务 Tomcat |
应用 服务 JBoss EAP |
Azure 容器 应用 |
AKS | 虚拟 机 |
---|---|---|---|---|---|---|
Spring Boot/ JAR 应用程序 |
空值 | 不可用 | 不可用 | 不可用 | 不可用 | 空值 |
Spring Cloud/ applications |
空值 | 不可用 | 不可用 | 空值 | 指南 已计划 |
指南 已计划 |
Web 应用程序 Web 应用程序 |
空值 | 指南 | 空值 | 指南 | 指南 | 指南 已计划 |
Java EE 应用程序
请使用以下行查找在特定应用服务器上运行的 Java EE 应用程序类型。 请使用列来查找将托管应用程序的 Azure 服务目标。
目标 → 应用服务器 ↓ |
应用 服务 Java SE |
应用 服务 Tomcat |
应用 服务 JBoss EAP |
Azure 容器 应用 |
AKS | 虚拟 机 |
---|---|---|---|---|---|---|
WildFly/ JBoss AS |
空值 | 空值 | 指南 | 空值 | 指南 | 指南 已计划 |
Oracle WebLogic Server | 空值 | 空值 | 指南 | 空值 | 指南 | 指南 |
IBM WebSphere | 空值 | 空值 | 指南 | 空值 | 指南 | 指南 已计划 |
Red Hat JBoss EAP | 空值 | 空值 | 指南 | 空值 | 指南 | 指南 |