Quarkus学习(一):quarkus概述

Spring已经发布很久了,从Spring改变SOA架构到现在已经快二十年了,现在都在容器化、云原生,一些旧的理念已经不太适应这个容器化的环境,所以这次要介绍一个云原生的微服务框架Quarkus。

Quarkus是什么

Quarkus是由Red Hat公司于2018年开始研发的一款面向云原生的Java开发框架,旨在使 Java 成为Kubernetes 和无服务环境中的领先平台。Quarkus被称为“超音速、亚原子”(supersonic,subatomic)的Java框架。

Quarkus的官网是 https://quarkus.io/, 在github的仓库是:https://github.com/quarkusio/quarkus

记得19年刚刚尝试Quarkus的时候还是0.xx的版本,现在已经2.xx的版本了,Quarkus确实发展很快,各方面的功能已经越来越完善了,红帽作为开源社区的领导者也确实做的很好。

Quarkus的特点

  • 云原生:支持通过GraalVM Native-Image将Java应用打包成本地二进制镜像,减少内存使用、缩短应用启动时间。这个原生镜像的能力确实很强,打包的镜像特别小,启动快,在服务切换的时候特别有用。

  • 低使用成本:与常见的Java标准、框架等协同工作,如:Spring、Hibernate、Netty、RestEasy等,无需学习新的标准和规范. 严格来说Quarkus使用的是CDI的Bean标准,跟Spring自己定制的标准不是同一个,各种注解都是有差异的,但是差异不算太大。

  • 高开发效率:代码热更新,无需重启即可查看代码改动的结果(dev环境下),支持单元测试、本地debug等。 代码热更新? 其实这个springboot的 devtools也可以实现,并不是只有这家才有的。。

  • 同时支持命令式和响应式代码。 响应式框架Quarkus使用的是mutiny这个框架,spring生态也有对应的Reactor 框架,在web端的实现就是Webflux。

  • 支持同时运行在GraalVM和HotSpot两种虚拟机上。其实虚拟机这个Spring现在也支持了。

我觉得最主要的特性还是云原生的支持吧,启动速度快,支持打包原生镜像:
比如quarkus官网这个性能对比图:
performance

可以看到quarkus打包的镜像rest接口的只有12MB,启动速度只需要0.016, 比起普通的java应用真是快多了。这也是quarkus作为云原生框架能跟go 抗衡的一点吧。

为什么用Quarkus

为什么用Quarkus? 可能还是处于技术人的好奇心吧,其实各种框架性的功能Spring、springboot、springcloud都提供了,但Spring已经越来越臃肿了,各种依赖,各种限制,越来越不适应云原生的应用环境了。有时间我们只是一个很简单的CRUD应用,使用spring生态开发出来,开发时间又长,镜像又大, 启动时间又慢。 而Quarkus正是为了解决我们在容器化环境开发微服务的问题而诞生的,启动ms级,镜像只有10多M, 这样我们的微服务容器更新版本的时候只需要几秒就可以拉取完镜像,并且启动快速,迅速可以替换掉旧的应用。真是太方便了, 非常值得一学!