docker|谁才是微服务王者:Quarkus 与 Spring Boot

docker|谁才是微服务王者:Quarkus 与 Spring Boot

文章图片

docker|谁才是微服务王者:Quarkus 与 Spring Boot

文章图片

docker|谁才是微服务王者:Quarkus 与 Spring Boot

文章图片

docker|谁才是微服务王者:Quarkus 与 Spring Boot

文章图片

docker|谁才是微服务王者:Quarkus 与 Spring Boot

文章图片


在容器时代(“Docker 时代”)Java 仍然处于领先地位 , 但哪个更好?Spring Boot 还是 Quarkus?
【docker|谁才是微服务王者:Quarkus 与 Spring Boot】
谁会最先进的?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 \"\\\" http://localhost:8080/echo/ualter | jq .


现在我们看到它正在工作 , 让我们创建 Docker 映像 。 从这里下载 GraalVM:https