为 Java 应用程序选择合适的 Azure 服务
本文将指导你使用 Azure 服务来部署 Java 应用程序,从而强调 Azure 对各种 Java 技术和体系结构的支持。 它概述了“直接迁移”、容器化和平台即服务 (PaaS) 等部署方法,以适应不同的控制和简单级别。
文章提倡 A+B 思维模式,建议根据应用程序需求来选择服务,而不是固定的 A 或 B 选择。 它建议考虑用例、业务目标、安全性和预算,以采用灵活的方法。 文章强调了 Microsoft 与 Java 生态系统领导者的合作关系,以增强开发人员的体验,并推荐了用于部署 Java 应用程序(无论是源代码、二进制文件还是容器)的 Azure 服务。 Microsoft 承诺为 Java 应用程序提供最适合部署策略的 Azure 服务,最大限度地提高效率、可扩展性和成本效益,在这样的支持下,这种细致入微的方法将有助于致力创新。
自信、轻松地部署任何 Java 应用程序
Java 生态系统包括多种技术,如 Java SE、Jakarta EE(Java EE 和 J2EE 的后继者)、Spring、众多应用程序服务器和其他框架。 无论使用 Java 来做什么,如构建应用程序、使用框架和运行应用程序服务器,Azure 都能为工作负荷提供丰富的选择。 同样,Azure 支持任何应用程序体系结构 - 从在 VM 或容器上运行的单体应用程序,到在完全托管服务上运行的基于云原生、微服务的应用程序。
Azure 为在云中运行 Java 应用程序提供了以下三种主要方法,这些方法根据不同的控制水平和简单程度来量身定制:
通过“直接迁移”方法,可以将现有应用程序以最小的改动直接迁移到 Azure 虚拟机。
容器化提供了灵活性,Azure Kubernetes 服务 (AKS) 和 Azure Red Hat OpenShift 是协调容器化应用的主要平台。
平台即服务 (PaaS) 代表了便捷和高效的顶峰,可提供最佳的开发人员生产力和运营可管理性,通常还具有最经济的总体拥有成本。
无论 Java 应用程序开发处于哪个阶段,Azure 都能提供兼容的云解决方案来满足要求。 有关这些产品的详细信息,请参阅自信、轻松地部署任何 Java 应用程序。
Java 应用程序的完全可移植性:可在任意位置无缝部署
无论为 Java 应用程序选择哪种 Azure 服务,都能保证应用程序的灵活性。 因为你拥有 Java 代码及其编译输出,所以可以自由地将应用程序部署到任何地方 - 无论是本地开发计算机、生成服务器、本地环境,还是所选的任何云平台。 应用程序的可移植性就掌握在你的手中。
当然,当有如此多的选择时,你就会面临两难的境地。
两难选择 - Java 应用程序使用服务 A 还是 B
在浏览 Azure 的产品/服务时,可能就会遇到选择最适合运行 Java 应用程序的 Azure 服务的两难境地。 这一选择至关重要,因为它会影响资源规划、预算、项目时间表,并最终影响应用程序的上市时间。 这一决定不仅会影响初始部署成本,还会影响持续维护费用。
过去,企业往往不得不在两种平台、技术或相互竞争的软件应用解决方案之间做出选择。 例如,组织必须决定是将 WebLogic 还是 WebSphere 用于 Java 企业应用程序,是将 Docker Swarm 还是 Kubernetes 用于容器管理,或者采用容器还是虚拟机 (VM) 进行部署。 这种决策过程被称为“A 或 B 思维模式”,它与 A/B 测试有很大不同,后者是将网页或应用程序的两个版本进行比较,以确定哪个版本的性能更好。 在这种情况下,“A 或 B 思维模式”是指在部署应用程序时选择一种平台或技术,而不是另一种平台或技术。 在传统的内部部署实践中,决策往往受到各种因素的制约,如打包软件交付模式、基础结构和软件许可方面的大量前期投资,以及生成和部署任何应用平台所需的漫长准备时间。
将这种思维方式引入 Azure 可能会导致在创建一个单一平台上花费过多时间,而该平台又试图适应所有应用程序,从而可能导致延迟和效率低下。 然而,Azure 提供了一种更有利的方法,鼓励人们从这种限制性思维模式转变为一种兼收并蓄的思维模式,最终获得更好的投资回报率 (ROI)。
当过渡到 Azure 时,云环境提供了一种灵活的模式,你可以根据自己的需要来调配和取消调配资源,从而不必在一种服务与另一种服务之间做出选择。 这种灵活性引入了“A+B”方法,这一策略有别于传统的“A 或 B 思维模式”,鼓励更广泛、更具包容性的思维方式。 Azure 可以轻松且经济高效地融合多种服务的优势,并采用“A+B 思维模式”,从而促进这种转变。 这种方法强调了选择最符合具体应用需求的服务的原则,从根本上说,就是提倡为手头的工作选择合适的工具。
向“A+B 思维模式”的转变使得组织能够拓宽决策流程和技术策略,拥抱这种思维模式带来的新的可能性和机遇。 本文阐述了“A+B 思维模式”的原则,使你能够明智地选择最能满足应用程序要求的 Azure 服务。 无论是 Azure 容器应用 (ACA)、Azure 应用程序服务、Azure Kubernetes 服务还是虚拟机,“A+B 思维模式”都能让你从一系列 Azure 服务中进行评估和选择,以托管你的应用程序。 这种理念普遍适用,超越了语言和框架的界限。 虽然这里的重点是 Java 应用程序,但“A+B 思维模式”对任何编程语言开发的应用程序都同样适用且大有裨益。
采用“A+B 思维模式”后,你就不会局限于单一的、预先确定的服务。 相反,你有权以最适合自己应用程序独特需求的方式来组合服务。 这种方法不仅提高了灵活性和可扩展性,还优化了成本和运营效率。 这种方法可确保你的技术策略与所处的云环境一样具有动态适应性。
为什么不必考虑服务 A 或服务 B
为应用程序选择合适的云服务不一定非要在服务 A 或服务 B 之间做出二选一的决定,这要归功于云提供的灵活性和广泛选择,尤其是 Azure。 以下部分将分析为什么没有必要坚持传统的“非此即彼”的选择,以及采用更灵活的方法如何有利于运营。
从旧习惯到新的灵活性
传统上,部署 IT 系统需要对硬件和软件进行大量前期投资,同时还需要漫长的安装时间。 在这种环境下,精心选择一个平台并优化其周围的一切以节省成本和资源就变得顺理成章了。 然而,云环境(包括 Azure)的按需和弹性特性带来了模式的转变。 只需为使用付费,调整资源以满足自身需求变得简单易行,而无需承担初始资本支出的负担。
向云的转移
迁移到云,尤其是迁移到 Azure,会为基础结构和平台责任的管理方式带来重大变化。 如下图所示,以前由贵组织承担的大部分繁重工作现在都转移到了 Microsoft。 这一变化简化了操作,减少了管理应用程序所需的工作量。 你不会受到管理多个平台的限制,可以自由选择最适合每项工作的工具,而不必担心额外的成本和复杂性。
下图显示了客户和云提供商之间的责任分担模式:
选择最适合各种需求的选项
在这个以云为中心的新世界里,决策过程变得更多的是为正确的工作选择正确的工具,而不是试图将所有需求都纳入一个预先确定的服务中。 无论是在适用于 Spring Boot 应用程序的 Azure Kubernetes 服务和 Azure 容器应用之间进行选择,还是选择任何其他服务集,重点都会落在哪种服务最能满足每个特定应用程序的要求。
微服务的兴起
微服务的采用进一步支持了这种灵活的方法。 从设计上讲,微服务鼓励对每项服务采用最适合的技术,从而促进技术的多样性,这自然与“A+B 思维模式”相吻合。 这种方法就是利用不同服务的优势,建立一个更强大、更高效、更可扩展的应用程序体系结构。
采用 A+B 的好处
采用“A+B 思维模式”有几大好处。 它可以提高灵活性和敏捷性,使你能够为运营的各个方面选择最合适的工具和服务。 这种方法不仅能提高资源和成本效率,还能缩短产品的上市时间。 最终,这种方法可以让技术选择与业务需求和目标更加紧密地结合起来,从而促进卓越运营。
总之,云,尤其是 Azure,提供了一种部署和管理应用程序的新思路。 摒弃限制性的“A 或 B 选择”,采用“A+B 思维模式”,就能做出更符合应用特定需求的决策,从而提高效率、敏捷性并节约成本。
向“A+B 思维模式”过渡的实用指南
下面列举了一些关键原则,可作为过渡到“A+B 思维模式”并继续坚持下去的指导原则:
从用例到解决方案,而不是反过来。 通常情况下,许多软件团队会先确定技术,然后再试图强行适应用例和设计。 在许多情况下,这种方法会在成本、开发时间、资源和运营费用方面产生大量的开销。 在开始使用解决方案之前,要明确用例和需求,包括功能性和非功能性需求。
了解业务目标、业务性质和竞争对手,以及需要多久推出一次新功能。 在设计解决方案时,应始终以实现业务目标为导向。
了解安全与合规要求。 在云时代,一切都可以通过 Internet 来访问,因此安全至关重要,不容商量。 此外,根据你所服务的行业,应用程序可能还需要满足某些合规性要求。 必须设计自己的解决方案,以抵御高级安全攻击并满足合规要求。
了解预算和时间表。 清楚了解初始开发、持续运行和未来发布的预算。 此外,还要弄清自己的时间表。 项目延误的成本,无论是额外开支还是对业务的负面影响,往往都会被低估。 设计符合预算和时间表的解决方案。
酌情考虑云原生。 云原生体系结构和技术是一种方法,用于设计、构造和操作在云中构建并充分利用云计算模型的工作负载。 使用云原生技术,可以更快地生成应用程序并将其部署到生产环境。 云还提供了在企业内部无法实现的功能,例如弹性、全球规模、高级分析、人工智能和机器学习 (ML) 功能。 尽可能基于云原生技术来设计解决方案。
思考 DevOps 文化。 DevOps 不仅仅是工具或流程,它还是一种软件开发实践,可促进开发与运营之间的协作,从而实现更快、更可靠的软件交付。 DevOps 通常被称为一种文化,它将人员、流程和技术联系在一起,以创造持续的价值。
选择能满足业务和非功能性要求的解决方案:
- 实现速度最快。
- 从技能培训、构建、部署和运营所涉及的成本来看要具有成本效益。
- 易于操作。
- 与自动化完全兼容。
- 从设计上支持 DevOps。
这些原则有助于将注意力集中在应该关注的地方 - 建立一个能满足业务目标的解决方案,而不是将解决方案强行安装到预先确定的平台上。
异常
与其他任何事情一样,A+B 也有例外。 以下列表并不详尽,但为可能遇到的一些例外情况提供了方向性指导:
企业策略。 例如,一些企业在全企业范围内采用容器来生成和部署应用程序,因为它们可能具有多种编程语言,而且他们希望以统一的方式来生成和部署所有的应用程序。
执行太欠缺。 在进行 A+B 分析之前,可能已经选择了一种解决方案。 如果已经深入执行解决方案,请继续执行,但对于下一个应用程序,请使用“A+B 思维模式”的原则,为用例选择合适的解决方案。
大规模数据中心迁移。 为了加快云迁移的过程,企业通常采用一种名为“直接迁移”的策略,即使用 Azure Migrate 等工具将服务器(托管应用程序)批量迁移到 Azure。 有些阻止使用这种方法将数据中心迁移到 Azure,并以高效、经济的方式将它们关闭。 在这种情况下,我们建议在迁移到 Azure 后使用“A+B 思维模式”来对应用程序进行现代化改造。
重要注意事项
我们为你提供了思考框架和原则,你可以使用这些框架和原则在 Azure 中为应用程序选择合适的目标。 这并非一刀切的做法。 它不是“A 或 B”,而是“A + B”。
下图总结了为任何应用程序选择 Azure 服务的重要注意事项:
如何为 Java 应用程序选择合适的 Azure 服务
为了在 Azure 上 Java 应用程序的众多技术选项中简化选择过程,我们创建了一个简单的决策树,以帮助开发人员、客户和系统集成商选择最佳的 Azure 服务。
除了考虑非功能性需求的实用指南外,从技术角度来看,首先要考虑的问题是你是否需要对基础结构加以控制。 如果没有,托管服务就是最好、最明智的选择。 应用程序的性质 - 是基于 Spring 还是基于 App Server 将进一步指导着决策:Spring 应用程序适合 Azure 容器应用程序,而 Azure 应用程序服务适合 Tomcat 或 JBoss EAP 应用程序。
对于需要基础结构控制的用户来说,选择取决于对多云技术的偏好:Azure 虚拟机可提供简单的过渡,而对于那些与 Tanzu 集成的用户,Tanzu on IaaS 市场产品则是理想之选。 投资 Kubernetes 的客户可以选择 Azure Kubernetes 服务和 Azure Red Hat OpenShift。 这一决策框架旨在通过将客户需求与 Azure 最合适的解决方案相匹配来简化选择。
Microsoft 与众多合作伙伴合作,包括以下领域的合作伙伴:
- 领先的 Java 生态系统合作伙伴,如 Oracle、Broadcom、Red Hat、IBM 和 OpenAI。
- 主要数据库和工具组织,如 MySQL、PostgreSQL、MongoDB Labs、DataStax、Redis Labs、Confluent 和 Elastic。
- 可观测性专家,如 New Relic、Dynatrace、AppDynamics、Grafana Labs 和 Datadog。
- 开发工具,如 IntelliJ、Maven 和 Gradle。
我们的综合投资用于打造更流畅的开发人员体验,确保与数据库、缓存、消息传递和目录等基本服务的无缝集成,以及提供全面的可观测性工具。 通过自动化、负载均衡和自动缩放,我们旨在为您减轻基础结构管理的负担。 这种支持让你能够集中精力通过代码创造业务价值,并确信基础系统是稳健和可缩放的。 因此,我们建议使用特定的 Azure 服务来托管和运行 Java 应用程序类型。
以源代码或二进制文件形式部署 Java 应用程序
对于 Azure 上的 Java 应用程序,无论是直接从源代码部署,还是作为编译后的二进制文件(JAR、WAR 或 EAR 文件)部署,都可以通过 Azure 专为这些目的提供的全面服务来简化部署。 Java 应用程序固有的可移植性意味着 Azure 可以提供各种服务,以满足独特的部署策略和运营需求。 这种灵活性可确保无论 Java 应用程序的具体情况如何,都能找到完全符合要求的 Azure 服务。
请考虑以下三个示例,它们展示了 Azure 如何满足不同 Java 应用程序部署场景的需要:
Spring 应用程序。 对于使用 Spring 应用程序的开发人员,我们建议使用 Azure 容器应用,它可与 IntelliJ、VS Code、Maven 和 Gradle 等常用开发工具以及 Azure DevOps、GitHub Actions 和 Jenkins 等自动化工具集成。 它还可支持 Application Insights、New Relic、Dynatrace、App Dynamics、Grafana、Log Analytics、Elastic 和 Splunk 等可观测性工具。 安全性是重中之重,它集成了处理机密和 TLS/SSL 证书的密钥保管库、通过托管身份与支持服务进行的“无密码”身份验证,以及 Azure 基于角色的访问控制 (RBAC),从而确保 Spring 应用程序在云中的安全、简化的部署流程。
JBoss EAP 上的 Java 应用程序。 同样,对于使用 JBoss EAP 的 Java 应用程序来说,由于 Microsoft Azure 团队和 Red Hat JBoss EAP 团队之间的合作,也可以获得量身定制的体验。 这种合作关系增强了对 Azure 应用程序服务的支持,为 JBoss EAP 应用程序提供了丰富的功能。 这种支持让你能够综合利用 Microsoft 和 Red Hat 的专业知识,从而确保 Java 应用程序能在 Azure 上顺利、安全、高效地运行。
WebLogic 上的企业 Java 应用程序。 在 Oracle WebLogic 上运行的传统企业 Java 应用程序也有通往 Azure 的专用路径。 Microsoft Azure 和 Oracle WebLogic 团队之间的合作为在 Azure 虚拟机上优化部署铺平了道路。 这种合作关系延伸到与虚拟机、存储、网络和负载平衡器等基本 IaaS 功能的集成,从而为 Azure 上的企业 Java 应用程序奠定了坚实的基础。 双方的协调努力可确保应用程序同时受益于 WebLogic 的稳健性和 Azure 基础架构的可伸缩性和灵活性。
这些场景凸显了 Azure 致力于为 Java 应用程序提供灵活、安全和高效的部署环境,以满足各种框架和体系结构的需求。 Azure 还为其他 Java 应用程序(如在 Tomcat 或 WebSphere 上运行的应用程序)提供专门服务,确保有适合各种类型 Java 应用程序的 Azure 服务。
通过使用这些量身定制的 Azure 服务,开发人员和运营商可以获得流畅、高效的云部署体验,从而轻松实现 Java 应用程序的自动化和安全。 但是,如果选择其他部署方案,则可能需要自己构建和维护这些重要的开发人员和操作人员体验。
下图显示了针对以源代码或二进制文件部署的每种 Java 应用程序类型推荐的 Azure 服务:
要详细了解本图中提到的服务,请使用下表中的链接:
将 Java 应用程序作为容器部署
在部署 Java 应用程序时,容器化是一种先进的方法,可提高企业在容器创建、管理和治理方面的自动化程度。 但挑战在于安全可靠地构建容器,这是快速交付高质量容器化软件应用程序的关键一步。 这一过程可以从零开始,也可以使用现有的容器系统,集成编译和存储代码和二进制文件的工具,以简化容器更新和管理。 这种集成对于融入持续集成/持续部署 (CI/CD) 管道至关重要,可为容器形式的 Java 应用程序提供灵活的部署方法。
Azure 服务不仅简化了容器化应用程序的交付,还为从源代码或二进制文件进行部署提供了清晰的路径,因而脱颖而出。 这种双重方法最大限度地减少了对开发人员的影响,减轻了基础结构或平台运营商的负担。 鉴于 Java 所固有的可移植性,Azure 广泛的容器服务选择可确保找到与部署策略和需求完美匹配的服务。
请考虑下面两个示例,它们展示了 Azure 如何满足容器化 Java 应用程序部署场景的需要:
Spring 应用程序。 Azure 容器应用是容器化 Spring 应用程序的绝佳选择。 它支持多种部署类型,包括源代码、二进制文件或容器映像。 这种灵活性使你能够在不同部署方法之间轻松转换。 你可能一开始使用容器,但后来决定以源代码或二进制文件的形式部署。 这种方案的优势在于它避免了持续构建和维护集装箱的需要,而这些工作可能较为繁琐、具有重复性并且耗时。
Tomcat 上的 Java 应用程序。 Azure 应用程序服务适合将设计在 Tomcat 上运行的 Java 应用程序容器化。 它支持各种部署类型,如二进制文件或容器映像。 与 Azure 容器应用一样,此服务可灵活交替使用不同的部署策略。 可以从容器部署开始,并保留随后切换到部署二进制文件(WAR 和 JAR)的选项。 这种多功能性可确保针对具体情况选择最有效的部署方法,从而简化开发和部署流程。
这些示例凸显了无论是通过传统方法还是现代容器化方法,Azure 都始终致力于为 Java 应用程序的部署提供多功能、高效和开发人员友好的环境。
下图显示了针对作为容器部署的每种 Java 应用程序类型推荐的 Azure 服务:
要详细了解本图中提到的服务,请使用下表中的链接:
总结
在部署 Java 应用程序的过程中,Azure 支持细致入微的 A+B 方法,从而提供一系列量身定制的服务,以满足每个应用程序的需求。 Microsoft 与 Java 生态系统领导者合作开发了一套 Azure 服务,每种服务都针对特定的 Java 应用程序类型(以源代码、二进制文件或容器形式部署)进行了推荐,从而简化了部署流程并确保最佳性能。 这种将部署策略与最合适的 Azure 服务相匹配的做法凸显了 Microsoft 为你提供灵活选择合适工具的承诺。 Java 应用程序固有的可移植性是一个关键优势,可在内部系统和不同云提供商之间实现无缝过渡,从而提高运营效率和灵活性。 通过倡导这种更广泛、更具包容性的选择流程,Microsoft 不仅简化了 Java 应用程序的云迁移过程,还最大限度地提高了可伸缩性、安全性、可观测性和成本效益。 最终,Microsoft 的指导可帮助开发人员和企业使用 Azure 生态系统,从而确保每个 Java 应用程序都能在最适合其需求的云环境中茁壮成长。