从第一篇的hello world,下面该对quarkus有个整体认识。以下将从几个方面对quarkus这个框架做个分析,资料从互联网收集而来。
Quarkus 是一个全栈的 Kubernetes 原生 Java 框架,旨在为容器和云环境开发和交付小型工件。它是一个开源项目,不仅与 Spring Boot 有许多相似之处,而且通过提供更快的应用程序启动时间和更低的请求时间来解决其一些主要痛点。此外,Quarkus 相对更具创新性,因为它提供了命令式和基于事件的编程模型的高级组合。
Quarkus 的独特功能使其成为云原生、无服务器环境的有效框架。它还包含 Microprofile API,并且可以与其他一些最广泛使用的 Java 平台完美配合,例如 Kafka、Hibernate 和 Eclipse。开发人员驱动的微服务还提供依赖注入,同时允许工程师根据需要集成应用程序。
Quarkus 的显着特点
以下是 Quarkus 与其他微服务架构区别开来的最突出的特性。
2019 年 3 月 20 日 初始发行,
Quarkus是一个专为部署在Kubernetes上的Java 框架。围绕它的关键技术组件是OpenJDK HotSpot和GraalVM。Quarkus 的目标是使 Java 成为 Kubernetes 和无服务器环境中的领先平台,同时为开发人员提供统一的反应式和命令式编程模型,以优化处理更广泛的分布式应用程序架构。
Quarkus 还在 Kubernetes 等容器编排平台中提供近乎即时的扩展和高密度利用率。给定相同的硬件资源,可以运行更多的应用程序实例。在首次亮相后,
Quarkus 在接下来的几个月里经历了几次改进,最终于 2019 年 10 月在开源社区发布了 1.0 版本。作为一个新框架,Quarkus 不需要尝试将新模式和原则改造到现有代码库中. 相反,它可以专注于创新。
容器优先
Quarkus 围绕容器优先和 Kubernetes原生理念设计的,针对低内存使用和快速启动时间进行了优化。
在构建时进行尽可能多的处理,包括采用封闭世界假设方法来构建和运行应用程序。这种优化意味着,在大多数情况下,所有在运行时没有执行路径的代码都不会加载到 JVM 中。
在 Quarkus 中,仅在应用程序启动时使用的类在构建时调用,而不是加载到运行时 JVM 中。Quarkus 还尽可能地避免反射,而是支持静态类绑定。这些设计原则减少了在 JVM 上运行的应用程序的大小,并最终减少了内存占用,同时还使 Quarkus 成为本机原生的。
Quarkus 的设计从一开始就考虑了本地编译。它针对使用 GraalVM 的本机映像功能将 JVM 字节码编译为本机机器二进制文件进行了优化。GraalVM 会积极删除在应用程序源代码中发现的任何无法访问的代码及其任何依赖项。结合 Linux 容器和 Kubernetes,Quarkus 应用程序作为原生 Linux 可执行文件运行,消除了 JVM。与传统 JVM 相比,Quarkus 本机可执行文件启动速度更快,使用的内存也少得多。
实时编码
大多数 Java 开发人员面临的主要生产力问题之一是传统的 Java 开发工作流程。对于大多数 Web 开发人员来说,这通常是:
编写代码→编译→部署→刷新浏览器→重复
这可能会极大地消耗生产力,因为编译 + 重新部署周期通常可能需要一分钟或更长时间。Quarkus 旨在通过其实时编码功能解决这个问题。在开发模式下运行时,工作流程很简单:
编写代码→刷新浏览器→重复
这将开箱即用,无需特殊设置。这适用于 Java 文件、应用程序配置和静态资源。
当您运行
mvn compile quarkus:dev
Quarkus 时,将以开发模式启动。当它接收到一个 HTTP 请求时,它将保留该请求,并检查是否有任何应用程序源文件已被更改。如果他们有,它将透明地编译更改的文件,使用更改的文件重新部署应用程序,然后 HTTP 请求将继续到重新部署的应用程序。Quarkus 重新部署比传统的应用程序服务器快得多,因此对于除了最大的应用程序之外的所有应用程序,这应该需要不到一秒钟的时间。
Quarkus 提供基于 Context 和 Dependency Injection 的依赖注入,通常称为 CDI。然而,目前在扩展框架上只实现了依赖特性的一个子集。同时,Spring Boot 使用依赖注入容器,在配置方面与 CDI 有很大不同。
如上所述,Quarkus 因其快速启动时间而成为顶级微服务架构之一。另一方面,Spring Boot 比 Quarkus 和大多数其他 Java Enterprise 项目相对慢。此功能使规模有利于 Red Hat 的开源项目。
创新的 Quarkus 项目使用开发人员广泛熟悉的框架,包括但不限于 Hibernate ORM。相反,Spring Boot 提供了更多的成熟度,因为它基于 Spring Data 抽象。也就是说Spring Boot 已经成熟并且拥有一个高度响应的社区,而quarkus处于刚刚起步。
Quarkus 与 Spring Boot 最相关的差异之一是它们各自的内存消耗。前者承诺在启动应用程序时降低内存消耗,而后者则具有更高的内存消耗。
参阅
Quarkus 在 JVM 和本机版本的启动时间上都比 Spring Boot 快。此外,在原生镜像的情况下,Quarkus 的构建时间也快得多。构建耗时 91 秒(Quarkus)vs 113 秒(Spring Boot),而 JVM 构建耗时 5.24 秒(Quarkus)vs 1.75 秒(Spring Boot)
没有对 GC、JVM 选项或任何其他参数进行任何更改情况下,两个框架的 JVM 版本都为堆保留了更多的内存,几乎相同的内存量。关于堆的使用,JVM 版本比原生版本消耗更多的内存,但是看这对,Quarkus 似乎比 JVM 版本中的 Spring 消耗略少。但是,同样,差异非常小。
**Quarkus JVM 版本在压力下以及在中等负载时具有良好的性能。它似乎具有更高的吞吐量和略短的响应时间。**但是差异太小。
大佬对于对比有较为详尽的说明,但总体梳理下来,quarkus在生态方便并没有那么如意,而且在线程以及整体吞吐处理响应时间方便,差距不大。还是那句话根据具体的业务场景取选择,但目前还是不建议将项目直接由springboot转为quarkus。(有异议欢迎提出)当然可以去多多学习,毕竟有备无患。