Blog chevron_right Cloud Cost

当 10,000 个 JVM 在一个生产环境中协作时会发生什么

More than 10,000 JVMs collaborated in one enterprise with Azul Optimizer Hub, reducing cloud costs by 20%+.

总结  

一家大型跨国企业通过 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) 编译器拥有关于应用程序实际使用方式的信息,而不是对应用程序可能的使用方式做出普遍的假设。

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
Vanilla OpenJDK experiences stalls, errors, and missed SLAs at the beginning of a run, and slower, less efficient code for the life of the server. 
原生 OpenJDK 在运行开始时会出现卡顿、错误和未达到 SLA 的情况,并且在服务器的整个生命周期内,代码运行速度会变慢、效率会降低。 
Optimizer Hub enjoys faster time to full speed, fewer errors and missed SLAs at beginning of the run, and produces the world’s fastest, most efficient code.
Optimizer Hub 在运行开始时即可更快达到全速,错误和未达到 SLA 的情况更少,并能生成全球最快、最高效的代码。

Optimizer Hub 的第二项服务是云原生编译器。它将 JIT 编译器与单个 JVM 解耦,并将其卸载到弹性可扩展的集中式服务中。当 JVM 需要编译代码时,它会将代码连同收集到的分析数据一起发送到云原生编译器。它会编译代码并将其返回给 JVM。通过消除资源争用,可以为单个服务容器配置更少的计算能力,从而节省成本。

不使用 Cloud Native Compiler With Cloud Native Compiler

原生 OpenJDK 使用更多、更大的实例,这些实例容易出现停顿和性能问题。 

Optimizer Hub 可在开始时以更少的错误更快地达到全速,并生成全球最快、最高效的代码。

此外,云原生编译器是一个长期运行的进程,允许它维护已编译代码的缓存。当需要启动同一应用程序的多个实例来应对负载突然增加时,它不需要为每个实例编译相同的代码。首次编译后,代码将存储在云原生编译器中,以便可以立即返回以供后续服务调用。

原生 OpenJDK Azul Platform Prime
Vanilla OpenJDK can only warm up once JVMs start handling traffic.
原生 OpenJDK 只能在 JVM 开始处理流量后预热。
Optimizer Hub removes optimization work from the local machine and shifts it to an elastically scalable optimizer in the cloud. 
Optimizer Hub 将优化工作从本地机器中移除,并将其转移到云端弹性可扩展的优化器。 

通过利用 Optimizer Hub 的集中式服务,Azul Platform Prime 能够: 

  • 提供尽可能快的执行代码,  
  • 使新的 JVM 能够更顺畅地启动并更快地达到全速,从而提高弹性、减少错误并提高 SLA 达成率 
  • 大幅削减每个单独 JVM 上的 CPU 工作负载,使应用程序在相同工作负载下使用更少的计算实例,并将云计算成本降低 20% 以上。 

一家跨国企业通过一项改进,即使用由 Optimizer Hub 增强的 Azul Platform Prime,大规模提升了应用程序的响应速度和稳定性,同时降低了基础设施成本。如今,这家企业提供更好的客户体验,并提高了运营效率。关键的基础设施元素是由 Optimizer Hub 增强的 Azul Platform Prime。不妨来尝试一下吧!

相关信息
Azul Platform Prime
Optimizer Hub
ReadyNow Orchestrator
云原生编译器