自信、轻松地部署 Java 应用程序
Java 生态系统包括多种技术,如 Java SE、Jakarta EE(Java EE 和 J2EE 的后继者)、Spring、众多应用程序服务器和其他框架。 无论使用 Java 来做什么 - 构建应用程序、使用框架和运行应用程序服务器,Azure 都能为工作负荷提供丰富的选择。 同样,Azure 支持任何应用程序体系结构 - 从在 VM 或容器上运行的单体应用程序,到在完全托管服务上运行的基于云原生、微服务的应用程序。
通常情况下,要运行 Java 应用程序,需要将其部署到应用服务器上,即运行应用程序的 Java 虚拟机 (JVM) 实例。 或者,也可以使用嵌入式应用程序服务器来生成独立的应用程序。 无论采用哪种方式,应用服务器都能提供通用的应用基础结构和功能,并与 Web 容器协作,以便对客户请求返回动态的自定义响应。 客户端请求可通过软件组件进行处理,这些组件可能包括 servlets、动态页面、企业 bean、支持类、依赖库和数据驱动程序。
Tomcat、JBoss EAP、WildFly、WebLogic 和 WebSphere 都是常用的应用程序服务器。 同样,Spring Boot、Quarkus 和 Open Liberty 也是用于构建带有嵌入式应用程序服务器的独立应用程序的常用框架。 Azure 支持所有 Java 应用程序服务器,让你能够使用任何 Java 应用程序服务器,放心、轻松地部署 Java 应用程序。
将 Spring Boot 或 Java 应用部署到任何应用程序服务器 - Tomcat 和 Jakarta EE
借助 Azure,可以运行任何版本、任何发行版的 Java 和任何应用服务器而不受任何限制,也无需管理自己的物理基础结构。 可以通过虚拟机、容器和完全托管服务等选项来决定需要多少控制权,或需要 Azure 处理多少日常管理工作。 如果使用的是商业支持的 Java 应用程序服务器或框架(如 VMware Spring Runtime、Red Hat JBoss EAP、Oracle WebLogic Server 或 IBM WebSphere、Liberty 或 OpenLiberty),则Azure 将为所有这些服务器或框架提供联合开发和支持的产品。
部署选项
Azure 为 Java 应用程序提供了丰富的部署选项,包括基础设施即服务 (IaaS)、容器即服务 (CaaS) 和平台即服务 (PaaS) 托管服务。 可以将现有 Java 应用程序移动到虚拟机 (VM) 上,以多种方式将其容器化,或将其部署到完全托管的 PaaS 服务上,以优化管理便利性、开发人员和运营效率以及总体拥有成本。
VM 和容器
在 Azure 上部署虚拟机或容器时,可以随意使用任何 Java 发行版和版本以及任何应用程序服务器。 选择完全取决于你。 请记住,需要手动配置基础结构及其组件。 属于这一类的部署选项包括:
Azure 虚拟机可以灵活进行虚拟化,而无需购买和维护运行虚拟机的物理硬件。 但是,你仍然需要通过安装、配置和修补 VM 上运行的软件来对其进行维护。
Azure 虚拟机规模集可创建和管理一组负载均衡的 VM。 可以根据需求或定义的计划自动增减 VM 实例的数目。
Azure Kubernetes 服务 (AKS),它通过处理所有运营开销(包括维护和运行状况监控等关键任务)简化了托管 Kubernetes 集群的部署。 AKS 支持容量的弹性预配,包括事件驱动的自动缩放和 KEDA 触发器。
Azure Red Hat OpenShift,可按需提供高可用性、全面管理的 OpenShift 集群。 OpenShift 提供增值功能来对 Kubernetes 进行补充,使其成为一个可改善开发人员和操作人员体验的统包式容器平台。
虽然可以在所有这些 IaaS 和 CaaS 服务上部署任何 Java 运行时,但我们仍建议使用以下运行时之一:
适用于 Java 11 或 17 的 Microsoft Build of OpenJDK - Microsoft 提供和维护的基本容器映像。
适用于 Java 8 的 Eclipse Adoptium Temurin - 由 Eclipse Adoptium 项目(前身为 OpenJDK 项目)提供的 Java 运行时。
这两种版本都可免费用于本地开发和测试,也可用于使用任何平台或 DevOps 工具构建生产就绪的二进制文件,而无需支付任何许可费用。 为了方便起见,我们推荐使用它们。 在使用这些版本之一时,如果遇到任何问题,并且拥有符合条件的 Azure 支持计划,则可以打开 Azure 支持工单,而无需支付更多费用。 尽管如此,值得指出的是,这些建议仅仅是我们在其他各种免费的 OpenJDK 版本中为便于支持而推荐的选项。 有关详细信息,请参阅Azure 和 Azure Stack 上的 Java 支持。
所有这些 IaaS 和 CaaS 部署选项都能让你轻松部署 Apache Tomcat 应用程序服务器。 如果使用的是商业产品,如 VMware 的 Spring Runtime、Red Hat 的 JBoss EAP、Oracle 的 WebLogic Server 或 IBM 的 WebSphere,Azure 还提供与这些供应商联合开发和支持的托管选项。 稍后,我们将在与 Java 生态系统合作伙伴联合构建和支持的解决方案中介绍这些解决方案。
完全托管 (PaaS) 服务
在 Azure 上运行 Java 应用程序的完全托管 PaaS 服务包括以下选项:
- Azure 容器应用,可让你在无服务器平台上运行微服务和容器化应用程序。 常见用途包括部署 API 终结点、托管后台处理应用程序、处理事件驱动的处理以及运行微服务。 基于 Azure 容器应用程序构建的应用程序可根据 HTTP 流量、事件驱动处理、CPU 或内存负载或任何 KEDA 支持的缩放程序进行动态缩放。
- Azure 应用程序服务,一种基于 HTTP 的服务,用于托管 Web 应用程序、REST API 和移动后端,具有内置安全性、负载平衡、自动缩放和自动化管理功能。 应用程序服务还支持全面的 DevOps 功能,如持续部署、包管理、过渡环境、自定义域和 TLS/SSL 证书。
Azure 应用程序服务和以代码或二进制文件 (JAR/WAR) 形式部署的 Azure 容器应用的 Java 运行时由 Microsoft 提供和维护。 它们只支持 OpenJDK 的 LTS 发行版,使用 Java 8 的 Eclipse Adoptium Temurin 以及 Java 11 和 17 的 OpenJDK Microsoft 版本。 不过,也有一些注意事项,例如,我们联合开发和支持的合作伙伴产品(稍后讨论)使用自己的运行时。
对于使用自己的容器映像生成的 Azure 容器应用,由于需要根据源代码生成和管理自己的容器映像,因此可以自由使用自己选择的 Java 发行版和版本以及应用程序服务器。
无服务器函数
有时并不需要整个 Java 应用程序。 例如,对于实时数据处理,你可能只需要一小段代码即可大规模触发 - 也许是由数以百万计的事件触发。 此类事件可通过 Azure 事件中心引入,由在 Azure Functions 中大规模运行的事件驱动型无服务器 Java 代码处理,并保存到 Azure Cosmos DB 等数据存储中。
与 Java 生态系统合作伙伴共同构建和支持的解决方案
Microsoft 已与 Java 生态系统中的领先供应商合作,为在 Azure 上运行 Java 提供同类最佳的解决方案,包括联合开发和支持的托管服务,以及针对流行 Java 应用程序服务器的 Azure 市场产品/服务。 我们还集成了常用的应用程序监控工具,本文档稍后将进行介绍。
JBoss EAP (Red Hat)
Red Hat 为企业提供开源解决方案。 JBoss 企业应用程序平台 (EAP) 就是这样一种解决方案,它是一种常用的应用程序服务器平台,已通过 Java EE 认证,并符合 Web Profile 和 Full Platform 两种版本的 Jakarta EE 标准。 Red Hat 还是 Java 标准、OpenJDK、MicroProfile、Jakarta EE 和 Quarkus 的贡献者。
我们与 Red Hat 合作,在 Azure 应用程序服务上提供 Azure 应用程序服务上的 Red Hat JBoss 企业应用程序平台 (EAP) - 使 Java 开发人员能够将他们的 Jakarta EE 应用程序部署到应用程序服务中,而无需单独订阅 Red Hat 或获取 Red Hat 许可证,同时获得两家公司的集成支持。 我们还为 Azure VM、Azure VM 规模集和 Azure RedHat OpenShift (ARO) 推出了类似的联合产品 - 后者也由 Microsoft 和 Red Hat 联合运营。
WebLogic Server (Oracle)
我们与 Oracle 合作,在 Azure VM 上提供 Azure VM 上的 Oracle WebLogic Server (WLS) 和 Azure Kubernetes 服务上的 Oracle WebLogic Server。 这些解决方案通过自动化模板操作(如预配虚拟网络/存储、安装 Linux/Java 资源、设置 WebLogic Server 以及使用网络安全组配置安全性)来帮助用户轻松迁移到 Azure。
WebSphere/Liberty/Open Liberty (IBM)
我们与 IBM 合作,共同为 Azure VM 上的 WebSphere 应用服务器 (WAS)、Azure Kubernetes 服务上的 WebSphere Liberty 和 Open Liberty 以及 Azure Red Hat OpenShift 上的 WebSphere Liberty 和 Open Liberty 开发解决方案。 有关详细信息,请参阅在 Azure 上运行 IBM WebSphere 系列产品的解决方案有哪些?这些解决方案可将 WebSphere 工作负载轻松迁移到 Azure,从而自动执行建立高可用性 WebSphere 集群所需的大部分资源预配任务。 双方的合作涵盖了从现有关键任务工作负载到云原生应用程序等一系列用例。
Apache Kafka on Confluent Cloud (Confluent)
过去,想要使用 Confluent Kafka 服务的 Azure 客户必须在 Azure 和 Confluent Cloud 中分别创建和管理资源和用户。 为了减少这种麻烦,Confluent 和 Microsoft 合作提供 Apache Kafka for Confluent Cloud,这是 Azure 市场提供的 Apache Kafka 完全托管服务,包括通过 Azure 门户、Azure CLI 或 Azure 管理 SDK 创建和管理 Confluent Cloud 资源。
如今,客户体验更简单、更安全、更无缝。 作为统一工作流的一部分,客户可以预配和管理 Confluent Cloud 资源及其 Azure 资源,并利用为 Azure Functions、Azure Blob 存储、Azure 事件中心、Azure Data Lake Storage Gen2 和 Microsoft SQL Server 构建的完全托管连接器。 开发人员可以继续使用 Apache Kafka 客户端库来编写代码。
总结
与合作伙伴联合开发其中许多产品是一项持续不断的工作。 随着我们的合作伙伴不断对其产品进行创新,我们正与他们密切合作,以便迅速将这些创新引入 Azure,从而使客户能够放心、轻松地部署和缩放其 Java 应用程序。
总之,无论使用 Java 做什么,Azure 都能为工作负荷提供丰富的选择。 您可以生成任何 Java 应用,使用任何框架,运行任何应用程序服务器,并支持任何应用程序体系结构 - 从在 VM 或容器上运行的单体应用程序,到在完全托管服务上运行的基于云原生、微服务的应用程序均可。