原创

QUARKUS初体验

1.什么是QUARKUS?

Quarkus是 Red Hat为GraalVM 和 HotSpot 量身定制用程序。特点是启动超快,内存极低,并且在容器编排平台(如Kubernetes)中提供了近乎即时的向上扩展和高密度的内存利用率。并且基于GraalVM,为我们提供了编译成native程序的能力。如果你觉得SpringBoot的启动速度太慢了内存占用率太高了,那么可以在日常开发中尝试一下Quarkus,也许会给你不一样的体验。我将通过一系列的教程,来介绍如何使用Quarkus。

2.QUARKUS VS Spring Boot

Metrics Spring Boot JVM Quarkus JVM Spring Boot Native Quarkus Native
Startup time (sec) 5.395 4.075 0.082 0.142
Build artifact time (sec) 1.759 5.243 113 91
Artifact size (MB) 30.0 31.8 94.7 80.5
Loaded classes 8861 8496 21615 16040
CPU usage max (%) 100 100 100 100
CPU usage average (%) 82 73 94 92
Heap size startup (MB) 1048.57 1056.96
Used heap size startup (MB) 193.31 157.066 84.574 60.41
Used heap max (MB) 604.1 567.854 144.984 519.526
Used heap average (MB) 434.155 362.46 114.779 289.968
RSS memory startup (MB) 197.7 159.1 90.5 57.1
Max Threads 77 47 73 42
Requests per Second 319 240 395 236
通过这个实验结果,
  • 我们可以观察到 Quarkus 在 JVM 和原生版本的启动时间方面都 Spring Boot 快
  • Artifact(工件)的大小出现了同样的情况,Quarkus 生成了更小的包而再次领先。
  • 平均响应时间Quarkus 优于Spring Boot
  • Quarkus 最大线程数比Spring Boot 少

3.代码工程

实验目的

快速体验quarkus项目

生成代码

https://code.quarkus.io/ 26576 下载ZIP,导入到 ideal中去,这边已经有一个现成的工程模块,可以参考

4.测试

编译打包

(注意JDK版本,最低要求11)
./mvnw compile quarkus:dev
查看控制台日志
[INFO] --- quarkus:3.12.3:dev (default-cli) @ Quarkus ---
[INFO] Invoking resources:3.3.1:testResources (default-testResources) @ Quarkus
[INFO] skip non existing resourceDirectory D:\IdeaProjects\ETFramework\Quarkus\src\test\resources
[INFO] Invoking quarkus:3.12.3:generate-code-tests (default) @ Quarkus
[INFO] Invoking compiler:3.13.0:testCompile (default-testCompile) @ Quarkus
__ ____ __ _____ ___ __ ____ ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2024-07-29 16:24:21,193 INFO [io.quarkus] (Quarkus Main Thread) Quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.12.3) started in 2.018s. Listening on: http://localhost:8080

2024-07-29 16:24:21,197 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.
2024-07-29 16:24:21,198 INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, rest, rest-jackson, smallrye-context-propagation, vertx]

--
Tests paused
Press [e] to edit command line args (currently ''), [r] to resume testing, [o] Toggle test output, [:] for the terminal, [h] for more options>
访问http://localhost:8080/ 97696 DEV UI 541   访问http://localhost:8080/hello
Hello from Quarkus REST

编译native Code

前面我们说过了Quarkus的一个优势是借助GraalVM可以将我们的代码打包成native code 所以我们来打包一下。
./mvnw package -Pnative
等待编译,这个编译的时间会比较久一点。编译成功后我们进入target文件夹中可以看到编译后的可执行的文件(*-runner),直接运行它就可以了。

打包成docker.jvm/ docker.native

$ mvn clean package -Dnative -Dquarkus.native.container-build=true -Dquarkus.native.container-runtime=docker

5.引用

 
正文到此结束
Loading...