Serverless架构下使用Spring native GraalVM工具方式加快Spring Boot应用启动速度

Publish: August 4, 2021 Category: 编程 No Comments

关于什么是Spring Navtive 和 Spring Native的优缺点上一篇文章已经有介绍,不太了解的小伙伴可以参考之。

0x01 系统要求

我们以Windows平台为例

下载GraalVM 地址: https://www.graalvm.org/downloads/
设置JAVA_HOME 和 PATH 环境变量
以管理员方式执行 gu install native-image 将native-image 扩展集成到JDK中

这个过程可能失败,需要挂一下代理

set https_proxy=socks5://192.168.xx.xx:1080 

如果执行成功会显示如下信息

C:\Windows\system32>gu install native-image  
Downloading: Component catalog from www.graalvm.org
Processing Component: Native Image                                                                                      
Downloading: Component native-image: Native Image  from github.com                                                      
Installing new component: Native Image (org.graalvm.native-image, version 21.2.0)


阅读剩余部分...

Serverless架构下使用Spring native 容器方式加快Spring Boot应用启动速度

Publish: August 3, 2021 Category: 编程 No Comments

0x01 Spring Native介绍

众所周知Sping Boot的启动速度在15s左右,Serverlless架构下如果没有预留实例的情况下,遇到业务峰时候会出现一部分终端用户服务长时间得不到响应甚至出现不可用情况。对用户体验敏感的应用及其不适合。如果大量预留实例会极大增加服务器成本造成浪费,如果采用人工值守的方式又是一种及其落后的运维方式,复杂业务场景下对运维人员也是一种折磨。那有没有一种方式能加快Spring Boot
的启用速度呢?答案是:有!

这个神器就是Spring官方提供的工具:Spring Native。 Spring Native使用GraalVM提供的编译器将Spring应用直接编译成“Native Image"形式能单独运行并且包含共享库的二进制程序。直接抛弃了JVM,和JVM相比Native Image 简单易用并且足以支撑各种业务场景,包括:微服务、函数计算、更友好的容器支持和k8s。使用Native Image一个最明显的优势是加快启动速度、瞬间触达性能峰值和降低内存占用。

但是Native Image也有一些问题和缺点需要时间来解决,相比传统应用编译Native Image 是一个很重的过程,并且缺少运行时优化,相比JVM还不够成熟。

和JVM相比其主要特点如下:

  • 构建时从入口开始静态分析
  • 未使用部分不会构建
  • 反射、资源和动态代理需要自行配置
  • 类路径在构建阶段固定
  • 没有懒加载:启动时在执行阶段需要的东西都被提前加载到内存
  • 部分代码在构建时运行
  • 并非支持所有Java项目,有一些限制

Spring Native的目的是提供一个除JVM的的另外一个选择,Spring Native 部署提供一个轻量级的容器。事实上在这个平台上Spring 应用几乎不用做修改就可以很好的运行。

Spring Native包含的模块:

  • Spring-native 运行时核心依赖,也提供了Native API接口
  • spring-native-configuration: 配置
  • spring-native-docs: 文档
  • spring-native-tools: 构建工具
  • spring-aot: AOT转换工具核心
  • spring-aot-gradle-plugin: gradle AOT转换插件
  • spring-aot-maven-plugin: maven AOT转换插件
  • samples: 特性样例

阅读剩余部分...