使用 Quarkus 为云原生时代优化 Java

简介
本文探讨了 Quarkus 如何帮助组织降低成本、简化开发并将 Java 应用程序现代化,以适应当今的云原生环境。它概述了采用 Quarkus 的实际好处,并重点介绍了其核心功能如何解决传统 Java 框架常见的性能和可伸缩性挑战。
Quarkus 已被各行业采用。其中一个例子是 Orange,一家全球电信供应商,选择 Quarkus 来支持其 5G API 计划,并受益于其快速的启动时间、轻量级的占用空间以及与 Kubernetes 的无缝集成。
-
在评估了多个框架后,Orange 选择 Quarkus 作为公开 5G API 的最佳解决方案,这得益于其快速的启动速度、轻量级的占用空间、模块化以及与 Kubernetes 的无缝部署。Quarkus 在 4G/5G 网络核心成功部署了 10 个 API,并实现了平稳的升级和优化的资源使用。这巩固了 Quarkus 作为电信创新的关键技术。
有关社区用户故事的集合,请参阅 Quarkus 用户故事博客系列。这些故事重点介绍了不同团队和组织如何在实际中使用 Quarkus。
Quarkus 有什么优势?
通过热重载和开发模式提升开发者体验
Quarkus 通过开箱即用的热重载支持,简化了传统的“编写-编译-部署-刷新”周期。当开发人员进行更改时,Quarkus 会自动检测、重新编译并重新部署应用程序,从而无需手动重启。
虽然通过第三方工具已经存在类似的功能,但 Quarkus 以原生方式提供此功能,且无需许可费用。这显著提高了生产力并改善了开发人员体验。
成本效益和性能
通过优化低内存使用和快速启动时间,Quarkus 实现了更高密度的部署和快速扩展。对于可比的工作负载,Quarkus 通常消耗更少的 CPU 和内存等资源,这可以在云环境中带来显著的成本节约。然而,考虑切换的组织应始终衡量和评估其特定工作负载,以验证这些实际效益。
核心是响应式的
Quarkus 的核心建立在 Eclipse Vert.x 之上,这是一个高性能的响应式工具包。尽管如此,它允许开发人员主要以命令式风格工作,同时利用其响应式底层提供的性能优势。这种混合方法允许开发人员在命令式编程中榨取更多效率,同时提供在有意义的地方采用响应式模式的灵活性。与传统的仅响应式框架不同,Quarkus 允许开发人员在单个应用程序中结合命令式和响应式风格。这对于需要高吞吐量和低延迟的系统尤其有利,确保应用程序在高负载下保持健壮。Quarkus 的响应式模型使其成为事件驱动架构和微服务的理想选择。
-
Quarkus 中响应式消息传递的一个基本示例
@ApplicationScoped public class PriceConverter { @Incoming("prices") @Outgoing("converted-prices") public double convert(double priceInEuro) { return priceInEuro * 1.1; } }
在此示例中,价格从一个通道(
prices
)接收,进行转换,然后发送到另一个通道(converted-prices
)。此模式支持高吞吐量的事件驱动处理,并具有简洁高效的逻辑。 -
使用 Quarkus 中的响应式路由的一个响应式 HTTP 端点示例
@ApplicationScoped public class GreetingRoute { @Route(path = "/hello", methods = HttpMethod.GET) public Uni<String> hello() { return Uni.createFrom().item("Hello from reactive route!"); } }
此路由使用 Mutiny 中的
Uni
以响应式方式处理 HTTP GET 请求,可以轻松构建非阻塞、低延迟的 API。
Quarkus 可以解决您当前的哪些开发痛点?
Quarkus 一个常被忽视的好处是它如何改进跨团队的入职和标准化。通过内置的约定、自动服务配置和精选的扩展默认设置,Quarkus 帮助开发人员快速上手,并鼓励跨项目的一致模式。
开发服务
Quarkus Dev Services 通过自动配置所需的数据库、消息代理或身份提供商等服务,减少了开发和测试过程中的摩擦。例如,如果您的应用程序包含 PostgreSQL、Kafka 或 Keycloak 扩展,Quarkus 可以在没有任何手动设置的情况下启动必要的容器。这使您可以专注于编码,而不是配置基础设施,从而加快本地开发工作流程。
庞大的扩展生态系统
Quarkus 提供了一个丰富的扩展生态系统,可以简化与数据库、消息系统、身份验证提供商和云服务等关键技术的集成。除了官方扩展之外,Quarkiverse 社区还提供了一个不断增长的开源扩展集合,由生态系统中的贡献者维护。这扩展了支持技术的范围,并使开发人员能够从共享解决方案和社区专业知识中受益。
热门扩展包括:* quarkus-hibernate-orm
和 quarkus-jdbc-postgresql
,用于无缝数据持久化。* quarkus-smallrye-reactive-messaging
和 quarkus-kafka-client
,用于响应式消息传递和 Apache Kafka 集成。* quarkus-oidc
,用于实现 OpenID Connect 身份验证和保护应用程序。* quarkus-micrometer
和 quarkus-opentelemetry
,用于可观测性、指标和跟踪。* quarkus-container-image-docker
和 quarkus-kubernetes
,用于容器化和部署到 Kubernetes 平台。
这些扩展被广泛采用,因为它们减少了样板代码,提供了可靠的开箱即用默认配置,并遵循云原生最佳实践——使 Quarkus 易于集成到实际架构中。
“好的,我想试试,但是迁移我的工作流程到 Quarkus 足够容易吗?”
迁移到新框架可能会令人望而生畏,即使它承诺提供更好的性能、更低的成本和更佳的开发体验。这就像被邀请搬到一个更好的社区住一栋更好的房子,但由于打包、搬家和安顿下来的麻烦而犹豫不决。
有了 Quarkus,转型不必具有破坏性。由于其与标准 Java API 的兼容性、对 Jakarta EE 和 Spring 的支持以及广泛的扩展,许多项目可以在不重写现有代码的情况下逐步采用 Quarkus。无论您是从传统的 Java EE 应用程序服务器、基于 Spring 的堆栈,还是从 Micronaut 或 Dropwizard 等其他框架迁移,Quarkus 都提供了熟悉的 API、工具和迁移指南来简化过渡。该平台开箱即用地支持常用的 Jakarta 规范,如 JAX-RS、CDI、JPA 和 Bean Validation。对于 Spring 用户,兼容层包括对常用注解和组件的支持。请参阅 Spring DI 指南了解更多信息。
需要入门方面的帮助?您并不孤单。Quarkus 团队在整个迁移过程中提供专家指导,从初步架构审查到生产就绪。无论您是在评估框架还是计划进行全面过渡,都可以获得支持,以帮助确保顺利成功地采用。
只需要一个向前迈出的决定。您的团队值得拥有一个更快、更精简、更云原生的未来。