Quarkus 性能

专为快速启动、高吞吐量和低资源消耗而设计

Container image Container image

Quarkus 的设计理念是通过使用构建时优化和响应式核心来实现高效,从而实现快速启动时间、高吞吐量、低响应延迟、减少内存占用和最小资源消耗。 因此,Quarkus 速度很快...非常快。

通过减少工作量快速启动:构建时原则

Quarkus 重新定义了 Java 应用程序的构建和执行方式,将大部分工作转移到构建阶段,确保高成本的工作只发生一次——在构建过程中——而不是每次启动时。 这使得在 GraalVM 原生镜像和传统 JVM 部署上都能获得更快、更小、更高效的 Java 应用程序。

例如,在构建时,Quarkus 会读取部分应用程序配置,扫描类路径以查找带注解的类,并构建应用程序模型。 通过尽早执行此操作,Quarkus 有足够的信息来消除不必要的组件并计算所需的精确启动指令。

Quarkus Build Time Principle Quarkus Build Time Principle

这种构建时优化提供了几个关键优势

  1. 减少启动时间:Quarkus 在构建时执行大部分繁重的工作,从而显著缩短了启动时间,并使应用程序能够更快地达到峰值性能。
  2. 更低的内存消耗:通过最大限度地减少分配和类加载,Quarkus 减少了内存使用量。 用构建时字节码生成代替反射进一步降低了 JVM 的运行时工作负载。
  3. 更好的延迟和更高的吞吐量:Quarkus 在构建时生成高度优化的代码,并修剪不必要的类和方法。 例如,它将间接层交织在一起,从而实现更好的 JIT 优化。 这些改进带来了更快的代码和更好的延迟。

无需头痛的高并发:响应式核心

Quarkus 基于响应式原则构建,使用基于 Netty 和 Eclipse Vert.x 的高效异步、非阻塞引擎。 它使用少量事件循环而不是大型线程池,从而减少了资源使用并优化了硬件行为,从而提高了响应时间。

底层响应式并不意味着您必须编写响应式代码。 Quarkus 提供三种开发模型

  1. 命令式模型:一种传统的同步方法,由于优化的 I/O 层而具有更快的执行速度,非常适合较低的并发性。 高并发会增加内存使用量。
  2. 响应式模型:使用异步、非阻塞代码实现高并发和最少的资源,但实现和调试起来更加复杂。
  3. 虚拟线程 (JDK 21+):结合了命令式和响应式模型的优点,允许命令式代码在轻量级虚拟线程上运行,以实现高并发和低内存开销,但仍存在一些限制。

构建时原则和响应式核心结合在一起会发生什么?

构建时优化和响应式核心的结合使 Quarkus 成为一个高效的框架,在几个关键领域表现出色

Memory icon Memory icon

减少内存

构建时原则通过消除不必要的组件并在构建时进行预计算来最大限度地减少运行时内存使用量,从而减少类加载和内存分配。 响应式核心通过使用少量事件循环而不是大型线程池来进一步减少内存使用量,从而使应用程序能够以更小的内存占用处理更高的负载并实现高部署密度。

Startup icon Startup icon

快速启动时间

由于构建时优化,应用程序的大部分繁重工作,例如类路径扫描、配置加载和依赖注入设置,都会在应用程序启动之前完成。 这大大减少了启动应用程序并准备好提供服务所需的时间。 响应式核心通过确保以最小的阻塞处理 I/O 操作来对此做出贡献,从而进一步减少了启动延迟。 高效的启动过程意味着应用程序可以更快地响应新的负载条件。 这种组合支持实施 LightSwitchOps 模式,从而在控制成本的同时实现弹性。

Throughput icon Throughput icon

高吞吐量

构建时优化确保在启动之前完成类路径扫描、配置加载和依赖注入等任务,从而大大缩短启动时间。 这种高效的启动使能够更快地响应负载变化,并支持 LightSwitchOps 模式以实现经济高效的弹性。 响应式核心最大限度地减少了 I/O 操作中的阻塞,进一步降低了延迟并允许处理大量并发任务。

Disk footprint icon Disk footprint icon

优化的资源消耗

构建时原则和响应式核心优化了 CPU、内存和系统资源的使用,从而以更少的资源实现高性能。 这降低了云环境中的运营成本,并通过减少资源消耗提供了可持续性优势。

持续测量,持续改进

Quarkus 致力于持续提高性能,特别是对于在关键执行(热)路径上运行的代码。 通过持续优化,Quarkus 确保每条指令和分配的字节都很重要,使其成为开发高性能、云就绪应用程序的最有效框架之一。

相关链接

“响应式 CRUD 性能:案例研究”博客文章
“测量性能”指南