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/
下载ZIP,导入到 ideal中去,这边已经有一个现成的工程模块,可以参考
代码仓库
- https://github.com/Harries/springboot-demo(quarkus)
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/
DEV UI
访问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.引用
- Quarkus - Start coding with code.quarkus.io
- Quarkus - Supersonic Subatomic Java