- Spring开发者的Quarkus实战
- 任钢
- 2293字
- 2023-08-28 18:31:17
1.5 Quarkus框架给Java开发者带来的便捷和实惠
Quarkus主要包括如下内容[2]:
1 较强的技术优势
Quarkus提供了显著的运行时效率(基于Red Hat测试),表现在:快速启动(几十毫秒)允许自动扩展和减少容器以满足Kubernetes上的微服务以及FaaS现场执行的时间需要;低内存利用率有助于优化需要多个容器的微服务架构部署中的容器密度;具有较小的应用程序和容器镜像占用空间。
开发者在使用Quarkus时,最初发现的一个好处是它提高了内存利用率,因为Java在传统上被认为启动时使用过多内存,并且与轻量级应用不兼容。研究发现,Quarkus Native减少了90%的启动内存使用容量,Quarkus JVM减少了20%。在JVM和Native模式下,启动时节省内存会在相同的内存占用情况下带来更高的吞吐量,这意味着在相同的内存容量下可以完成更多的工作。在Kubernetes上,使用Quarkus的Native开发可以多8倍的Pod(Pod是Kubernetes最小的管理单位),而使用Quarkus的JVM开发可以多1.5倍的Pod。这意味着使用Quarkus,客户可以用相同数量的资源做更多的事情,并且可以使用相同数量的内存部署更多的应用。提高部署密度和降低内存利用率是Quarkus为容器优化Java的几个关键方法。
Quarkus的启动速度非常快——Quarkus Native比一般Java框架的启动速度快12倍,比Quarkus JVM快2倍。这使得应用对负载变化的响应更迅速,在大规模操作(如Serverless架构)时更可靠,从而增加了用户的创新潜能,并提供了一种优于竞争对手的优势。
2 全面支持云原生和Serverless
Quarkus首先是容器优先,Quarkus为应用在HotSpot和GraalVM的运行做了优化和裁剪。它支持快速启动时间和较低的RSS内存使用,并且符合Serverless架构,形成面向应用容器化的解决方案。Quarkus还是一个完整的生态系统。Quarkus为在Serverless架构、微服务、容器、Kubernetes、FaaS和云中运行Java应用提供了有效的解决方案。Quarkus不仅仅是一个运行时(Runtime),更是一个包含丰富扩展的生态系统,目前已经有400多个扩展,并且仍然在不断壮大。
3 不用重复学习
Quarkus依赖于技术、标准、库和API的巨大生态系统。开发者不必花费大量时间学习一套全新的API和技术来获得Quarkus给JVM或原生镜像带来的好处。相反,开发者可以利用现有的知识和技能。Quarkus的规范和技术包括Eclipse MicroProfile、Eclipse Vert.x、上下文和依赖注入(CDI)、JAX-RS、Java持久性API(JPA)、Java事务API(JTA)、Apache Camel和Hibernate等。每个功能都很简单,几乎没有配置,并且可以直观地使用,从而让开发者有更多的时间专注于他们的领域专业知识和业务逻辑。
4 引入了实时编码功能
最初的Quarkus版本中就引入了实时编码功能。开发者只需运行命令“./mvnw compile quarkus:dev”,Quarkus将自动检测对Java文件所做的更改,包括类或方法重构、应用程序配置、静态资源,甚至类路径依赖项更改。当检测到此类更改时,Quarkus透明地重新编译和重新部署更改,同时保留应用程序的先前状态。Quarkus重新部署通常在不到1s的时间内发生。
5 轻松创建原生镜像
遵循简单性和提高开发者生产力的理念,使应用程序从构建到原生镜像的过程非常简单。Quarkus构建工具通过Maven或Gradle可以完成GraalVM的所有繁重工作和集成。开发者或CI/CD系统只需运行一个构建,就可像任何其他Java构建一样,生成本机可执行文件。将应用程序作为原生镜像进行测试也同样简单。
6 支持远程开发模式
Quarkus团队因实时编码功能而获得了广泛赞誉。改进的下一个逻辑步骤是将实时编码功能扩展到在远程容器环境中运行的Quarkus应用程序。此增强称为远程开发模式,允许开发者使用相同的本地IDE,但应用程序将在“真实”环境中运行,可以访问本地开发计算机上不可用或不容易创建的服务。开发者可以运行“./mvnw quarkus:remote dev”命令来启用该功能,实现在本地开发计算机上所做的更改自动实时推送到正在运行的远程Quarkus应用程序中。在构建Kubernetes本机应用程序时,此功能大大缩短了在提交源代码管理之前开发、测试和更改所需的时间,从而显著增强了开发循环的效率。
7 开发用户界面DevUI
Quarkus在开发模式下运行会启用Quarkus的DevUI。DevUI是一个在/q/Dev URI中公开的登录页,用于用户浏览各种Quarkus扩展提供的端点。Quarkus DevUI允许开发者快速可视化当前加载的所有扩展,查看其状态,并直接转到它们的文档。此外,每个扩展都可以在自定义页面和具有自定义操作的交互页面中添加自定义运行时信息。DevUI提供了对所有应用程序的配置访问、对应用程序日志文件的流式访问以及对应用程序测试套件的快速访问。开发者可以打开和关闭测试执行,触发测试执行,并在UI中查看当前测试执行状态。
8 提供开发服务
Quarkus通过引入Quarkus Dev服务继续提高开发者的生产力。Quarkus Dev服务功能为开发者提供了一个紧密的反馈循环。运行Quarkus Dev模式或运行测试时,Quarkus Dev服务将自动引导中间件(如消息代理)、数据库容器镜像,并为开发配置文件设置所有必需的配置属性。
9 连续测试
自Quarkus诞生以来,开发者的经验和生产力一直是Quarkus的主要关注点之一。连续测试功能将其提升到下一个级别。通过了解应用程序中的类和方法会影响哪些测试,用户可以在开发模式下进行测试驱动的开发。当对应用程序源代码进行更改时,Quarkus可以在后台自动重新运行受影响的测试,为开发者提供有关他们正在进行的代码更改的即时反馈。
10 提供CLI工具
Quarkus完全可以通过其CLI工具构建Quarkus应用程序并与之交互。Quarkus CLI工具通过轻松添加/删除扩展、构建项目和启动开发模式,使创建新项目和与现有项目交互变得非常容易。此外,开发者可以使用CLI工具列出和搜索可用的扩展。
11 扩展了框架
Quarkus通过利用开发者喜爱的最佳库以及在规范标准主干上使用在线库,带来了一个有凝聚力的易于使用的全栈框架,包括Eclipse MicroProfile、JPA/Hibernate、JAX-RS/RESTEasy、Eclipse Vert.x、Netty、Apache Camel、Undertow等。Quarkus还支持框架扩展机制。Quarkus扩展框架降低了使用Quarkus运行第三方框架并编译为GraalVM本机二进制文件的复杂性。
12 Quarkus社区非常活跃
Quarkus框架背后有像红帽这样的开源大厂商的支持,是值得信赖的技术。Quarkus还是完全的开源技术,它的上游社区十分活跃,版本发布节奏非常快,能够快速释放新特性和修复问题。依靠活跃的社区,维护者会快速回复问题和提供协助,用户会得到全面的问题解答。据用户反馈,Quarkus在可靠性方面的表现也是可圈可点的。