在容器时代(“Docker 时代”)Java 仍然处于领先地位,但哪个更好?Spring Boot 还是 Quarkus?
谁会最先进的?Spring Boot 或 Quarkus。
在容器时代(“ Docker 时代”),无论您是否在使用它,都不可否定java的活力。Java 在性能方面一直比较有优势,主要是因为代码和真实机器之间的抽象层,多平台的成本(一次编写,随处运行 - 还记得吗?),其中包含 JVM -between(JVM:模拟真实机器所做的软件机器)。
如今,使用微服务架构,也没有任何优势,为总是在同一个地方和平台上运行的东西(Docker 容器 - Linux) 环境构建多平台(解释)的东西。可移植性现在不那么重要了(可能比以往任何时候都重要),那些额外的抽象级别并不重要。
话虽如此,让我们对在Java中生成微服务的两种替代方案进行简单而原始的比较:非常知名的Spring Boot和不太知名的(尚未)Quarkus。
反对者
Quarkus是什么?
一套适用于GraalVM和 HotSpot的开源技术 ,用于编写 Java 应用程序。它提供(承诺)超快的启动时间和更低的内存占用。这使其成为容器和无服务器工作负载的理想选择。它使用 Eclipse 微配置文件(JAX-RS、CDI、JSON-P),这是 Java EE 的一个子集来构建微服务。
GraalVM 是一个通用的多语言虚拟机(JavaScript、Python、Ruby、R、Java、Scala、Kotlin)。 GraalVM (特别是 Substrate VM)使提前(AOT)编译成为可能,将字节码转换为本地机器码,从而生成可以本地执行的二进制文件。
请记住,并非所有功能都可以在本机执行中使用,AOT 编译有其局限性。注意这句话(引用 GraalVM 团队):
我们运行需要一个封闭世界假设的激进静态分析,这意味着在运行时可访问的所有类和所有字节码必须在构建时已知。
因此,例如,反射和 Java 本机接口 (JNI) 将不起作用,至少是开箱即用的(需要一些额外的工作)。您可以在本机图像 Java 限制文档中找到限制列表。
Spring Boot是什么?
这是真的吗?好吧,我只想说一句(请随意跳过),一句话:Spring Boot构建在 Spring Framework 事实上,是一个开源框架,它提供了一种更简单的方式来构建、配置和运行基于 Web 的 Java 应用程序. 使其成为微服务的良好候选者。
战斗准备——创建 Docker 镜像
Quarkus镜像
让我们创建 Quarkus 应用程序,以便稍后将其包装在 Docker 映像中。基本上,我们将做与 Quarkus入门教程相同的事情。
使用 Quarkus maven 原型创建项目:
mvn io.quarkus:quarkus-maven-plugin:1.0.0.CR2:create
-DprojectGroupId=ujr.combat.quarkus
-DprojectArtifactId=quarkus-echo
-DclassName="ujr.combat.quarkus.EchoResource"
-Dpath="/echo"
这将导致我们项目的结构,如下所示:
请注意,还创建了两个示例Dockerfile (src/main/docker):一个用于普通JVM App Image,另一个用于Native App Image。
在生成的代码中,我们只需要更改一件事,添加下面的依赖项,因为我们要生成 JSON 内容。
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-resteasy-jsonb</artifactId>
</dependency>
Quarkus 在整个 RESTEasy 项目实现中使用 JAX-RS 规范。
这是我们的“整个”应用程序:
这就是全部,使用下一个命令我们可以看到应用程序正在运行:
mvn clean compile quarkus:dev
在这种模式下,我们也开启了热部署,后台编译。让我们做一个简单的测试来看看:
curl -sw "\n\n" http://localhost:8080/echo/ualter | jq .
现在我们看到它正在工作,让我们创建 Docker 映像。从这里下载 GraalVM:https