侧边栏壁纸
  • 累计撰写 247 篇文章
  • 累计创建 16 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

原生更香之 Spring Native

kaixindeken
2021-04-26 / 0 评论 / 0 点赞 / 116 阅读 / 1,399 字

2021 年 3 月,Spring 发布了Spring Native的 beta 版本,该功能已经在start.spring.io上可用。

这意味着,除了 Spring 诞生以来就支持的 JVM,官方添加了使用 GraalVM 将 Spring 应用编译成原生镜像和原生可执行文件的支持,这样的话,就能提供一种新的方式来部署 Spring 应用。Spring Native 支持 Java 和 Kotlin。

这些原生的 Spring 应用可以作为一个独立的可执行文件进行部署(不需要安装 JVM),并且还能提供有趣的特征,包括几乎瞬时的启动(一般会小于 100 毫秒)、瞬时的峰值性能以及更低的资源消耗,其代价是比 JVM 更长的构建时间和更少的运行时优化。

1.png

通过简单的mvn spring-boot:build-image或gradle bootBuildImage命令,就能生成一个优化的容器镜像,它包含了一个最小的操作系统层和一个小的原生可执行文件,该文件只包含了必需的东西即 JDK、Spring 以及应用中所使用的依赖。

下面这个最小的容器镜像,它是一个 50MB 的可执行文件,包含了 Spring Boot、Spring MVC、Jackson、Tomcat、JDK 和应用本身。

1.png

这种原生方式,在很多场景下都会对 Spring 应用产生价值:

  • Serverless

  • 更廉价、更可持续地托管 Spring 微服务

  • 与VMware Tanzu这样的 Kubernetes 平台有很好的契合性

  • 想要最优的容器镜像,以打包 Spring 应用和服务

目前有两种主要的方式来构建Spring Boot本机应用程序:

  • 使用Spring Boot Buildpacks支持生成包含本地可执行文件的轻量级容器。(需要配置 Docker)

  • 使用 GraalVM 本机映像Maven插件支持来生成本机可执行文件。(需要预置 GraalVM )

在支持原生方面,Spring 有两个支柱性的策略。第一个是在不需要对现有的数百万个 Spring Boot 应用进行重大改动的情况下,对 Spring 基础架构进行调整以适应原生。这包括在 Spring 顶层项目中为实现原生友好而做出的改变,像 @NativeHint 这样的基础架构,以及在 Spring Native 中逐渐成熟的 Spring AOT 构建插件。

第二个支柱比 Spring 本身的范围更广,原生是一个与 JVM 特性有所差异的平台,但 Java 生态系统需要尽可能地保持一致,以避免出现两种截然不同的 Java 风格,如果这样的话,将会是维护上的一个挑战。

参考链接:https://spring.io/blog/2021/03/11/announcing-spring-native-beta

0

评论区