当前位置: 首页 > 工具软件 > Quarkus > 使用案例 >

云原生应用开发框架Quarkus介绍

贺俊杰
2023-12-01

云原生应用开发框架Quarkus介绍

1. 概述

Quarkus 是一个为 Java 虚拟机(JVM)和原生编译而设计的全堆栈Kubernetes云原生Java框架,用于专门针对容器优化的Java开发框架,并使其成为 serverless、cloud和Kubernetes环境下的高效开发平台

Quarkus 可与常用Java标准、框架和库协同工作,例如:Eclipse MicroProfile、Spring、Apache Kafka、RESTEasy (JAX-RS)、Hibernate ORM (JPA)、Infinispan、Camel 等

Quarkus 的使用CDI作为依赖注入解决方案,且包含一个Quarkus扩展框架来扩展功能并将其配置、引导并集成到您的应用中。添加扩展程序就像添加依赖项一样容易;或者您可以使用 Quarkus 工具。

此外, Quarkus还支持GraalVM AOT编译 ;传统的Java编译模式采用JIT(Just in time,即时编译,边运行边编译)而AOT(Ahead Of Time,运行前编译)可以把Java应用进行原生编译极大的提高应用性能,并允许直接在目标机器上直接运行。

2. Quarkus 特性

2.1 专为开发人员而设计

Quarkus 的设计从一开始就立足于简单易用,其功能几乎不需要配置即可正常使用。

开发人员可以为其应用选择所需的 Java 框架,而这些应用可以在 JVM 模式下运行,也可以在原生模式下进行编译和运行

为了方便开发人员的工作,Quarkus 还包含以下功能:

- 实时编码,旨在让开发人员能够即时检查代码更改的影响并快速进行故障排除
- 带有嵌入式托管事件总线的统一命令式和响应式编程
- 统一配置
- 简单的原生可执行文件生成

2.2 容器优先

无论是将应用托管在公共云上还是内部托管的 Kubernetes 集群中,快速启动和低内存消耗等特性对于降低总体主机成本来说都至关重要。

Quarkus 的开发遵从了容器优先的原则,这意味着它已通过以下方式针对降低内存使用和加快启动时间进行了优化:

- 完全支持 Graal/SubstrateVM
- 构建时元数据处理
- 减少反射的使用
- 本机映像预启动

因此,Quarkus 构建的应用其内存消耗只有传统 Java 的 1/10,而且启动时间更快(快了 300 倍),这些都大大降低了云资源的成本。


2.3 命令式和响应式编码

在设计上,Quarkus 能够在开发应用时无缝地结合熟悉的命令式代码和非阻塞、响应式样式。

这对于习惯使用命令式模型而不想切换风格的 Java 开发人员以及使用云原生/响应式方法的开发人员都非常有用。

Quarkus 开发模型可以适应您正在开发的任何应用。

对于在新的无服务器架构、微服务、容器、Kubernetes、功能即服务(FaaS)和云环境中运行 Java 而言,Quarkus 堪称是一个有效的解决方案,因为在创建它时就充分考虑了所有这些因素。


2.4 提供优异系统性能和研发效率

Quarkus是一个开源的kubernets-native Java框架,允许开发人员优化容器中的云原生应用程序以获得最佳性能。Quarkus提供:

  • 快速启动时间
  • 低内存消耗
  • 降低整体主机成本
  • 改进了Java应用程序的性能
  • 提高开发人员的生产率

3. 云原生开发选择Quarkus的4大理由

Quarkus是一个开源的、kubernets原生的Java框架,专为GraalVM和OpenJDK量身定制。它提供了一个完整的全栈框架,使用业界知名的Java类库和标准。有了Quarkus, Java可以成为Kubernetes和无服务器环境的领先平台,同时为开发人员提供统一的响应式和命命令式编程模型,以解决更广泛的分布式应用架构挑战。红帽公司是Quarkus项目的发起人,也是Quarkus社区的主要贡献者。
下面详细说明使用Quarkus作为编程工具的四个原因。


3.1 应用在云,容器,serverless 环境中部署

低内存消耗和快速的首次响应时间使Quarkus成为云、容器和无服务器环境的理想选择。使用Quarkus,您可以:

  • 使用GraalVM和HotSpot的编译时引导方法定制您的应用程序。
  • 首次启动毫秒级别的响应速度
  • 减少驻留集大小(RSS)内存,与传统云应用相比所需内存只有前者的十分之一
  • 在Kubernetes等容器编排平台上获得几乎即时的扩展性和高密度内存利用率
  • 实现更高的工作负载密度,降低硬件和云计算和内存的总体成本

3.2 提高生产力

Quarkus内置了很多自动化功能,允许开发人员更快地完成他们的工作。Quarkus功能特点:

  • 统一配置
  • 零配置和实时加载
  • 简化80%的通用代码和配置
  • 简化Java代码编译为机器语言的命令
  • 兼容流行的框架,如Eclipse MicroProfile, Spring Dependency Injection (DI), Hibernate等,允许开发者使用和集成其它开源框架和JAVA标准

3.3 支持多种开发模式

Quarkus无缝地将命令式模型和反应式模型结合在一起,因此开发人员可以使用最适合他们的技术来开发应用。Quarkus支持如下几种开发模式:

  • 反应式开发模式
  • 命令开发模式
  • 或者在同一个框架中使用两种模式

3.4 Java 优化

Quarkus对Java进行了优化,并通过内存消耗优化和快速的首次响应时间使其对容器、云和无服务器环境提供优异性能。

  • 对Java开发人员来说,学习曲线很低
  • 使Java可与本机编译、获得高级编程语言
  • 集成很多成熟框架——从数据库访问到集成和业务自动化
  • 支持微服务架构和开发

4. 容器优先策略

从一开始Quarkus就围绕容器第一的理念设计。这意味着Quarkus通过以下方式优化了低内存使用和快速启动时间:

4.1 优先支持Graal/SubstrateVM

Substrate技术从一开始就是Quarkus设计的重要组成部分。当应用程序被编译为本机映像时,它启动得更快,并且可以在比标准JVM小得多的堆中运行。Quarkus都是在Substrate中测试的,可以在没有-H:+ReportUnsupportedElementsAtRuntime标志的情况下运行。

4.2 构建时元数据处理

让尽可能多的处理在构建时完成,因此你的应用程序将只包含运行时实际需要的类。在传统模型中,执行初始应用程序部署所需的所有类在应用程序的整个生命周期中都存在,即使它们只使用一次。使用Quarkus时,它们甚至不会加载到生产JVM中。这导致内存使用更少,而且启动时间更快,因为所有元数据处理都已经完成。

4.3 减少反射的使用

Quarkus尽可能地避免反射,减少启动时间和内存使用。

4.4 本机镜像预启动

在本地映像中运行时,Quarkus会在本地映像构建过程中预启动尽可能多的框架。这意味着生成的本机映像已经运行了大部分启动代码,并将结果序列化到可执行文件中,从而导致启动速度更快

5. 结论

本文中,介绍了Quarkus的特性,以及它如何使我们的JAVA应用减少内存占用和毫秒级的首次启动时间的原理;Quarkus作为云,无服务器,K8s云原生开发框架值得我们研究尝试

 类似资料: