将 Java 应用程序迁移到 Azure

本文概述了将 Java 应用程序迁移到 Azure 的建议策略。

此迁移指南旨在介绍 Azure 方案的主流 Java,并提供高级规划建议和注意事项。 若要与 Azure 上的 Microsoft Java 团队讨论特定的 Java 应用迁移方案,请填写以下问卷,代表将联系你。

确定应用程序类型

在为 Java 应用程序选择云目标之前,需确定其应用程序类型。 大多数 Java 应用程序都是以下类型之一:

将在下面各部分介绍这些类型。

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 企业版应用程序(也称为 J2企业版 应用程序,或者最近,Jakarta 企业版 应用程序)可以包含 Web 应用程序的一些、全部或无元素。 这些应用程序还可以包含和使用雅加达企业版规范定义的更多组件。

Java EE 应用程序可打包为带 .ear 扩展的存档(EAR 文件),或带 .war 扩展的存档(WAR 文件)。

Java 企业版应用程序必须部署到符合 Java 企业版 的应用程序服务器(例如 Oracle WebLogic Server、IBM WebSphere、JBoss EAP、GlassFish、Payara 等)。

仅依赖于 Java EE 规范提供的功能的应用程序(即,与应用服务器无关的应用程序)可以从一个合规的应用程序服务器迁移到另一个合规的应用程序服务器。 如果应用程序依赖于特定的应用程序服务器(依赖于应用服务器),则可能需要选择一个允许你托管该应用程序服务器的 Azure 服务目标。

Web 应用程序

Web 应用程序在 Servlet 容器中运行。 其中一些应用程序直接使用 servlet API,而许多应用程序使用封装 servlet API 的其他框架,例如 Apache Struts、Spring MVC、JavaServer Face (JSF)等。

Web 应用程序会打包成带 .war 扩展的存档(WAR 文件)。

批处理作业/计划的作业

某些应用程序适用于短暂运行,执行特定工作负载,然后退出,而不是等待请求或用户输入。 此类作业有时需运行一次,有时则需定期按计划的时间间隔运行。 在本地,通常从服务器的 crontab 调用此类作业。

这些应用程序会打包成带 .jar 扩展的存档(JAR 文件)。

注意

如果应用程序使用计划程序(如 Spring Batch 或 Quartz)来运行计划任务,强烈建议你将此类任务构造为在应用程序外部运行。 如果应用程序在云中扩展为多个实例,则同一作业会运行多次。 此外,如果计划机制使用主机的本地时区,则在跨区域缩放应用程序时可能会遇到意外的行为。

选择针对的 Azure 服务目标

以下部分说明哪些服务目标满足应用程序要求,以及它们涉及的责任。

托管选项网格

使用以下网格可识别适用于你的应用程序类型的潜在目标。 如你所看到的,Azure Kubernetes 服务(AKS)和 Azure 虚拟机支持所有应用程序类型,但他们要求你的团队承担更多责任,如下一部分所示。

目标→

应用程序类型
应用
服务
Java SE
应用
服务
Tomcat
应用
服务
JBoss EAP
Azure
Spring
应用
Azure Container Apps AKS 虚拟
Spring Boot/JAR 应用程序
Spring Cloud 应用程序
Web 应用程序
Java EE 应用程序
商业应用程序服务器
(如 Oracle WebLogic Server 或 IBM WebSphere)
本地文件系统上的长期持久性
应用程序服务器级聚类分析
批处理作业/计划的作业
VNet 集成/混合连接
Azure 区域可用性 详细信息 详细信息 详细信息 详细信息 详细信息 详细信息 详细信息

持续责任网格

请使用以下网格来了解迁移后每个目标施加给团队的责任。

所指示 Azure 的任务完全或大部分由 Azure 管理。 你的团队负责持续处理所 👉指示的任务。 建议你通过一个稳定且高度自动化的过程来履行所有此类责任。

注意

这并不是一个详尽的责任列表。

目标→

任务
应用
服务
Azure
Spring
“应用”
Azure
容器
应用
AKS 虚拟
更新库
(包括漏洞修正)
👉 👉 👉 👉 👉
更新应用程序服务器
(包括漏洞修正)
Azure Azure 👉 👉 👉
更新 Java 运行时
(包括漏洞修正)
Azure Azure 👉 👉 👉
触发 Kubernetes 更新
(由 Azure 通过手动触发器执行)
空值 Azure Azure 👉 空值
灾难恢复 Azure Azure 👉 👉 Azure
协调非后向兼容的 Kubernetes API 变更 空值 Azure 👉 👉 空值
更新容器基础映像
(包括漏洞修正)
空值 Azure 👉 👉 空值
更新操作系统
(包括漏洞修正)
Azure Azure Azure Azure1 👉
检测和重启失败的实例 Azure Azure Azure Azure 👉
针对更新实施清空和滚动重启 Azure Azure Azure Azure 👉
基础结构管理 Azure Azure 👉 👉 👉
监视和警报管理 👉 👉 👉 👉

1 某些安全更新可能需要节点重启,但不会自动完成。 有关详细信息,请参阅在 Azure Kubernetes 服务 (AKS) 中将安全和内核更新应用到 Linux 节点。

如果将 servlet 容器(如 Spring Boot)作为应用程序的一部分进行部署,则应将其视为一个库。因此,这始终是你的责任。

确保本地连接性

如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅选择用于将本地网络连接到 Azure 的解决方案。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。

在开始任何迁移之前,应完成此操作。

清点当前容量和资源使用情况

记录当前生产服务器的硬件,以及平均和峰值请求计数和资源使用情况。 将需要此信息来预配服务目标中的资源。

迁移指南

请使用以下网格,按应用程序类型和针对的 Azure 服务目标来查找迁移指南。

Java 应用程序

请使用以下行查找 Java 应用程序类型和列,找出将托管应用程序的 Azure 服务目标。

若要将 JBoss EAP 应用迁移到应用服务上的 Tomcat,请先将 Java EE 应用转换为在 Tomcat 上运行的 Java Web 应用 (servlet),然后按照下面提供的指南操作。

如果要将 Tomcat 上的 Web 应用迁移到 Azure Spring Apps,请先将应用转换为 Spring Cloud 应用程序,然后按照下面所示的指导进行操作。

目标→

应用程序类型
应用
服务
Java SE
应用
服务
Tomcat
应用
服务
JBoss EAP
Azure
容器
“应用”
Azure
Spring
应用
AKS 虚拟
Spring Boot/
JAR 应用程序
空值 不可用 不可用 空值 指南 空值 空值
Spring Cloud/
applications
空值 不可用 不可用 空值 指南 指南
已计划
指南
已计划
Web 应用程序
Web 应用程序
空值 指南 空值 指南 空值 指南 指南
已计划

Java EE 应用程序

请使用以下行查找在特定应用服务器上运行的 Java EE 应用程序类型。 请使用列来查找将托管应用程序的 Azure 服务目标。

目标→

应用服务器
应用
服务
Java SE
应用
服务
Tomcat
应用
服务
JBoss EAP
Azure
容器
“应用”
Azure
Spring
应用
AKS 虚拟
WildFly/
JBoss AS
空值 空值 指南 空值 空值 指南 指南
已计划
Oracle WebLogic Server 空值 空值 指南 空值 空值 指南 指南
IBM WebSphere 空值 空值 指南 空值 空值 指南 指南
已计划
Red Hat JBoss EAP 空值 空值 指南 空值 空值 指南 指南

另请参阅