总结
一家大型跨国企业通过 Azul Platform Prime 的 Optimizer Hub 实现了性能和效率的里程碑,运行了 10,000 个 Java 虚拟机 (JVM),这些 JVM 彼此协作并共享优化。该企业在降低基础设施成本的同时,大规模提高了应用程序的响应能力和稳定性,从而带来了更好的用户体验和更高的业务效率。
在本文中,您将了解:
- 一家跨国企业如何承受不断上涨的云成本,以支持公司持续的成功
- 配备 Optimizer Hub 的 Azul Platform Prime 可节省超过 20% 的云成本
- Optimizer Hub 通过将优化任务从 JVM 转移到一组集中的服务,提高了以云为中心的 Java 应用程序的启动、预热和运行时性能
今年早些时候,一家 Azul Platform Prime 企业客户实现了其他任何组织都未曾实现过的事情:使用 Platform Prime Optimizer Hub 的单个实例,即可在数百个应用程序中实现 10,000 多个 JVM 之间的无缝协作。如果您感到疑惑,以下将解释其为何是重大消息。
该公司已经取得了持续的成功,但他们需要在保持规模经济、降低运营成本和提供流畅客户体验的同时,保持这种成功。随着云和基础设施成本的上升,企业领导者将优化云成本作为首要任务。
通过使如此多的 JVM 能够在数百个应用程序中协作并共享性能优化,企业在降低基础设施成本的同时,大规模地提高了应用程序的响应能力和稳定性。这意味着更好的客户体验和更高的业务效率。关键的基础设施元素是由 Optimizer Hub 增强的 Azul Platform Prime。
与其他语言开发的应用程序相比,Java 应用程序最显著的优势之一就是“一次编写,随处运行”。Java 被编译成字节码(虚拟机指令),并在运行时转换为特定于应用程序运行平台的指令和系统调用。这也使得基于 JVM 的应用程序通常比原生编译的应用程序表现更好,因为即时 (JIT) 编译器拥有关于应用程序实际使用方式的信息,而不是对应用程序可能的使用方式做出普遍的假设。
Start Your Platform Prime Journey
OpenJDK 的局限性
传统 JVM(例如 OpenJDK 的普通发行版)中的运行时分析和 JIT 编译的缺点是,它会导致应用程序无法达到其峰值性能。必须识别常用代码,必须分析这些代码的使用方式,并且必须在应用程序运行时对其进行编译。这段时间被称为 Java 应用程序的预热时间。
更复杂的是,当同一个应用程序重新启动后,每次都必须重复识别常用代码、对其进行分析和编译的过程。
为了解决这些限制,Azul 开发了 Optimizer Hub,它是 Azul Platform Prime 高性能 Java 平台的一部分。Azul Platform Prime 有两个主要组件:Azul Zing(OpenJDK 的增强构建版本)和附加组件 Optimizer Hub。
Optimizer Hub 可跨区域和可用区扩展,非常适合在容器化、弹性云环境中运行并采用现代 DevOps 实践的现代应用程序。它包含两项在客户环境中运行的服务:Optimizer Hub 包含两项服务:Cloud Native Compiler 和 ReadyNow Orchestrator。
- 云原生编译器提供集中式 JIT 编译和缓存,以节省成本并提高效率。云原生编译器将繁重的编译工作从单个 JVM 转移到集中式可扩展服务,从而大幅减少每个 JVM 上的 CPU 工作负载,并缓存编译以供重复使用。
- ReadyNow 是 Platform Prime 中的一项功能,它通过在 JVM 运行之间记录和重用 JIT 编译器分析和优化数据来解决 Java 的预热问题。ReadyNow Orchestrator提供 ReadyNow 预热优化配置文件的智能管理,以消除启动基于 JVM 的应用程序时的性能瓶颈,从而改善用户体验和 SLA 达成率。
ReadyNow 的基本概念是消除应用程序运行时重复进行代码分析的工作,如上所述。ReadyNow 的实现方式是为 JVM 提供与给定应用程序关联的“长期记忆”。为了实现这一点,应用程序在生产环境中运行,以便准确记录其使用情况。当应用程序完全预热后,会记录一个 ReadyNow 配置文件。该配置文件可以随时收集,如果需要,可以为同一个应用程序收集多个配置文件。配置文件包含与 JIT 编译相关的所有关键信息,具体而言,包括已加载类的列表、已初始化类的列表、JIT 编译器收集的所有分析数据、发生的任何去优化以及已编译代码的副本。
Azul Platform Prime 如何突破传统 JVM 的限制
当应用程序重新启动时,JVM 可以立即加载并初始化配置文件列表中的类,而无需从头开始。然后,它会编译必要的代码(如果需要)或重用配置文件中的代码。
在应用程序开始执行任何工作之前完成这项工作,几乎可以 100% 实现记录配置文件时所提供的性能。这样可以显著减少预热时间。
这是一个好的开始,但 Optimizer Hub 可以进一步改进。
ReadyNow 可以将配置文件存储在中央云存储库中,例如 Optimizer Hub 的 ReadyNow Orchestrator 服务。当基于容器的服务启动时,可以将 JVM 配置为从 Optimizer Hub 请求配置文件,而不是使用本地存储的配置文件。当需要更改配置文件时,可以将新的配置文件上传到 Optimizer Hub,并由后续 JVM 运行使用。当每个新的 JVM 在其容器中启动,并且 JIT 根据 ReadyNow 配置文件编译代码时,JVM 会将新版本的配置文件发送回 Optimizer Hub 中的 ReadyNow Orchestrator。这样做有两个好处:1) ReadyNow Orchestrator 会随着时间的推移“整理”最佳配置文件,以确保每个后续启动的 JVM 都具有最佳配置文件;2) 由于配置文件不再直接包含在容器映像中,因此无需重建或重新部署容器,从而节省时间和费用。
| 原生 OpenJDK | Azul Platform Prime |
|---|---|
原生 OpenJDK 需要根据服务器架构和应用程序使用模式“预热”其代码。 |
Optimizer Hub 智能地监控应用程序使用模式,以构建最佳优化的配置文件,并在流量开始之前应用它们。 |
与 JIT 编译相关的另一个问题是编译器必须与应用程序共享容器的资源。使用小型容器(例如双 vCore 实例)时,编译过程中应用程序吞吐量将减半。
| 原生 OpenJDK | Azul Platform Prime |
|---|---|
原生 OpenJDK 在运行开始时会出现卡顿、错误和未达到 SLA 的情况,并且在服务器的整个生命周期内,代码运行速度会变慢、效率会降低。 |
Optimizer Hub 在运行开始时即可更快达到全速,错误和未达到 SLA 的情况更少,并能生成全球最快、最高效的代码。 |
Optimizer Hub 的第二项服务是云原生编译器。它将 JIT 编译器与单个 JVM 解耦,并将其卸载到弹性可扩展的集中式服务中。当 JVM 需要编译代码时,它会将代码连同收集到的分析数据一起发送到云原生编译器。它会编译代码并将其返回给 JVM。通过消除资源争用,可以为单个服务容器配置更少的计算能力,从而节省成本。
| 不使用 Cloud Native Compiler | With Cloud Native Compiler |
|---|---|
原生 OpenJDK 使用更多、更大的实例,这些实例容易出现停顿和性能问题。 |
Optimizer Hub 可在开始时以更少的错误更快地达到全速,并生成全球最快、最高效的代码。 |
此外,云原生编译器是一个长期运行的进程,允许它维护已编译代码的缓存。当需要启动同一应用程序的多个实例来应对负载突然增加时,它不需要为每个实例编译相同的代码。首次编译后,代码将存储在云原生编译器中,以便可以立即返回以供后续服务调用。
| 原生 OpenJDK | Azul Platform Prime |
|---|---|
原生 OpenJDK 只能在 JVM 开始处理流量后预热。 |
![]() Optimizer Hub 将优化工作从本地机器中移除,并将其转移到云端弹性可扩展的优化器。 |
通过利用 Optimizer Hub 的集中式服务,Azul Platform Prime 能够:
- 提供尽可能快的执行代码,
- 使新的 JVM 能够更顺畅地启动并更快地达到全速,从而提高弹性、减少错误并提高 SLA 达成率
- 大幅削减每个单独 JVM 上的 CPU 工作负载,使应用程序在相同工作负载下使用更少的计算实例,并将云计算成本降低 20% 以上。
一家跨国企业通过一项改进,即使用由 Optimizer Hub 增强的 Azul Platform Prime,大规模提升了应用程序的响应速度和稳定性,同时降低了基础设施成本。如今,这家企业提供更好的客户体验,并提高了运营效率。关键的基础设施元素是由 Optimizer Hub 增强的 Azul Platform Prime。不妨来尝试一下吧!
