• quarkus(二) 初识


    quarkus(二) 初识

    ​ 从第一篇的hello world,下面该对quarkus有个整体认识。以下将从几个方面对quarkus这个框架做个分析,资料从互联网收集而来。

    什么是quarkus

    ​ Quarkus 是一个全栈的 Kubernetes 原生 Java 框架,旨在为容器和云环境开发和交付小型工件。它是一个开源项目,不仅与 Spring Boot 有许多相似之处,而且通过提供更快的应用程序启动时间和更低的请求时间来解决其一些主要痛点。此外,Quarkus 相对更具创新性,因为它提供了命令式和基于事件的编程模型的高级组合。

    ​ Quarkus 的独特功能使其成为云原生、无服务器环境的有效框架。它还包含 Microprofile API,并且可以与其他一些最广泛使用的 Java 平台完美配合,例如 Kafka、Hibernate 和 Eclipse。开发人员驱动的微服务还提供依赖注入,同时允许工程师根据需要集成应用程序。

    • Quarkus 的显着特点

      以下是 Quarkus 与其他微服务架构区别开来的最突出的特性。

      • 更快的启动时间: Quarkus 更快的启动时间可能是它最值得注意的特性。此外,由于它可以自动检测对 Java 和其他配置文件所做的更改,该框架拥有更快的热重载,有助于透明的重新编译和部署。这可以帮助开发人员降低执行的总体成本,这是一个巨大的优势。
      • **低内存消耗:**与大多数开源项目相比,Quarkus 需要的 RSS 内存非常低。此功能甚至允许平台为 GraalVM 定制应用程序。此外,它仅在设置、启动、集成或扩展应用程序时加载必要的类,从而降低了内存消耗。
      • **结合命令式和反应式风格:**虽然开发人员负责在命令式编程中将事件从队列中拉出,但反应式编程使框架能够正确调用开发人员注册的回调。有趣的是,Quarkus 统一了这两种风格以实现高效的应用程序开发。

    by wiki

    2019 年 3 月 20 日 初始发行,

    ​ Quarkus是一个专为部署在Kubernetes上的Java 框架。围绕它的关键技术组件是OpenJDK HotSpotGraalVM。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:devQuarkus 时,将以开发模式启动。当它接收到一个 HTTP 请求时,它将保留该请求,并检查是否有任何应用程序源文件已被更改。如果他们有,它将透明地编译更改的文件,使用更改的文件重新部署应用程序,然后 HTTP 请求将继续到重新部署的应用程序。Quarkus 重新部署比传统的应用程序服务器快得多,因此对于除了最大的应用程序之外的所有应用程序,这应该需要不到一秒钟的时间。

    与springboot相比

    依赖注入

    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 最相关的差异之一是它们各自的内存消耗。前者承诺在启动应用程序时降低内存消耗,而后者则具有更高的内存消耗。

    vs

    参阅

    image-20221111093227549

    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。(有异议欢迎提出)当然可以去多多学习,毕竟有备无患。

    参阅

    • Microservices: Quarkus vs. Spring Boot
    • https://cloudcomputingtechnologies.com/microservices-quarkus-vs-spring-boot/#:~:text=One%20of%20the%20most%20pertinent%20Quarkus%20vs.%20Spring,the%20development%20of%20basic%20and%20experimental%20front-end%20options.
  • 相关阅读:
    解锁新技能《docker如何搭建Redis哨兵模式》
    深度学习之基础知识
    java实现TCP通信(socket)服务端-客户端
    MySQL_关于JSON数据的查询
    鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:RichText)
    1023 Have Fun with Numbers
    Rust for循环语法糖背后的API
    Linux进程概念和控制(必备知识)
    基于HTML(甜品奶茶店)餐饮美食项目的设计与实现(html前端源码和论文设计)
    初识容器Docker
  • 原文地址:https://blog.csdn.net/qq_37681291/article/details/127807346