最近,我和 S&P Global 市场研究部门的研究总监 William Fellows 进行了对话,针对 Java 工作负载,我们专门探讨了如何减少浪费云资源的情况。说到底,优化云成本困难重重。
预算支出与实际支出之间的差额正逐渐变得越来越大。支出的主要领域包括云端集成和现代化服务、安全与合规监控,以及应用程序(尤其是 Java 应用程序)的现代化。
接下来,我们来大致探讨一下云技术的背景信息。
在计算资源提供方式的发展进程中,云技术的出现是一种必然。您无需面对安装自己的服务器、网络、电源供应设备和冷却设备所带来的成本和复杂性,因为这些都将由云服务提供商替您承担。需要计算资源时,您可以明确需求,然后只为使用时长付费。这是一种简单实用的定价模式。
用户可以立即体会到其潜在的益处。由于只需为使用的资源付费,无需投入资本建立数据中心,运营支出将得以降低。
控制超支难乎其难
很遗憾,许多用户并未真正实现节约成本,而且事实证明,云服务的成本甚至更高。
实际上,在 S&P Global 市场研究部门最近的一项调查中,有 27% 的受访者表示,2022 年 IaaS/PaaS/公有云超支的最大原因,是为应对非预期的需求和开支而扩大了资源规模。另有 15% 的受访者提到了超量配置,即投入的资源超过了实际所需。
为什么会发生这种情况?为什么这种情况在运行基于 JVM 的工作负载时更常见?
Java 与云成本有何关联?
为了理解 Java 如何影响应用程序的性能及其如何帮助控制超量配置,我们需要更深入地了解 Java 平台工作原理的背景知识。
Java 早期有一句营销口号,“一次编写,处处运行”。事实确实如此,这是因为,为 Java 平台编译应用程序代码时,生成的是字节码,而非本地机器指令。这样做的优点是无需修改或重新编译,即可在 Windows 或 Linux 机器上运行相同的代码,此外,还能为互联网规模的工作负载提供可扩展性。即使经过了近 30 年的历程,Java 也始终位居热门开发语言排行榜的前三名(并且大多数时候是前两名),这正是原因之一。
创造这种可扩展性和性能的是名为“即时 (JIT) 编译”的特性。最初,字节码会经过解释,逐句转换为本地指令。这样做的性能比不上提前 (AOT) 编译的传统代码。但随着常用代码段被识别出来,它们会在应用程序的运行过程中被编译为本地机器指令。经过编译后,可准确了解代码的使用方式,这为实现效果更佳的优化创造了条件。
编译所有常用代码段所需的时间被称为 JVM 应用程序的预热时间。对于许多要运行数天,甚至数周或数月的应用程序,这段时间微不足道,因为它与应用程序的运行时间相比,可以忽略不计。然而,对于现代基于微服务的应用程序,这些时间可能非常重要。微服务架构的一大优势,就是能够在负载突然增加时快速启动新的服务实例,并在负载下降时关闭它们。这本应创造最优秀的云端成本解决方案。但事实为什么未能办到?
对于基于 JVM 的应用程序,当启动新的服务实例时,预热时间会导致实例处理请求的能力出现延迟。为了使任务关键型企业的应用程序能够满足其 SLA,DevOps 团队经常会保留一组处于运行状态的服务,作为备用。这些服务经过充分预热,可在需要时立即投入使用。当然,这样做的缺点是即使服务未被使用,它们也会消耗资源。如果只是偶尔需要它们,这种做法将产生大量的浪费和额外的云成本。
改换 Java 运行时将帮助您减少云资源的浪费
好消息是,Azul 正在调整 Java 平台,在提升应用程序运行速度的同时解决这些问题。
我们开发了名为 Azul Platform Prime 的高性能版 JVM。这款 Java 运行时针对 Java 工作负载和 JVM 性能,解决了云成本优化方面的常见用户痛点:与垃圾收集 (GC) 相关的延迟、事务吞吐量,以及预热时间。
Platform Prime 完全符合 Java SE 标准,并通过了所有 TCK 测试,因此可以直接替换其他低性能 Java 平台。您无需更改或重新编译应用程序代码。
Azul Platform Prime 提供三个方面的改进:
- 连续并发压缩收集器 (C4)。这是一种无暂停收集器,即使扩展堆大小达到 20 TB,它也能消除垃圾收集的延迟问题。
- Falcon JIT 编译器。Falcon 基于开源的 LLVM 项目,通过针对硬件微架构量身定制的增强优化,可提供卓越的事务吞吐量。这是降低云成本的另一种方法。例如,运行 Kafka 事件流平台时,您每秒可额外处理多达 40% 的事务。您可以在满足 SLA 的同时,减少集群中节点的规模和/或数量。节点的数量越少、规模越小,意味着云支出也越少。
- ReadyNow 预热消除技术。当您运行应用程序或服务,直到所有常用代码都经过编译和优化时,ReadyNow 会记录一份概要,收集所有与已执行的编译相关的信息,其中包括已生成的代码。当应用程序或服务再次启动时,JVM 会使用这份概要,确保在开始执行应用程序代码之前,所有代码都经过编译并准备就绪。
准备好深入了解了吗?
我们的对话涉及许多关于云成本关键趋势的重要信息,值得了解。
- 云服务定价的变化可能对您有利:AWS、Azure 和 Google Cloud Platform 目录中价格、产品和服务的变化幅度已经十分明显,请做好准备,情况还将变得更为复杂。
- 对贵组织单位成本进行基准测试:对通用型、计算型和内存型虚拟机展开基准测试可挖掘一些减轻价格压力的方法,但这可能还不够。
- 如何比较云支出的变化:市场上最热门的云附加服务的趋势可能会让您惊讶。
您一定想听听我和 William 的完整对话。提供更高性能的 Java 运行时会产生巨大影响。