SpringOne 2022第2个议题《Introducing Spring Boot 3.0》,主要展示Spring Boot 3.0的性能以及要点,演讲者:DaShaun Carter。

image-20230130165407830

1.测试前提

硬件

演讲者强调了测试的两款典型的CPU:Apple M1Raspberry Pi(Broadcom BCM2711)

本文不展开两款CPU对比的性能差异,如果您对这两种CPU的性能参数感兴趣,可以在此看到详细的参数对比:

https://www.cpu-monkey.com/en/compare_cpu-raspberry_pi_4_b_broadcom_bcm2711-vs-apple_m1_max_24_gpu

image-20230130160044858

被测对象

执行如下脚本,可获得被测对象:

1
2
3
4
5
curl https://start.spring.io/starter.tgz \
-d dependencies-web, actuator \
-d javaVersion=17 \
-d bootVersion=3.0.0-RC2 \
-d type=maven-project | tar -xzf -

代码归档

测试代码归档在此:

https://github.com/dashaun/spring-boot-3-with-aot-processing

image-20230130160316666

Java版本

采用GraalVM:

image-20230130160356760

2.测试:mvnw vs mvnd

演讲者对比测试了mvnw clean packagemvnd clean package,对比了mvnwmvnd的性能差异。

mvnw clean package

测试结果:8.3s

image-20230130161233119

mvnd clean package

测试结果:5.6s

image-20230130161255058

结论:mvnd构建性能优于mvnw

image-20230130161311506

对mvnd的延伸阅读

mvnd也是一种maven wrapper,相比mvnw性能更好。详细资料如下:

https://github.com/apache/maven-mvnd

image-20230130160948600

3.测试:GraalVM AOT

演讲者展示了采用AOT技术构建Spring Boot 3.0应用,体现了性能的差异。

mvnw -Pnative native:compile

  • 构建时间延长至分钟级:使用mvnw -Pnative native:compile构建,构建时间长达6分钟。

image-20230130161937854

  • 启动时间缩短50%:未采用AOT方式的SpringBoot进程启动时间通常在1.5s左右,采用AOT方式缩短至0.7s。

image-20230130162028761

  • 资源消耗下降66%:未采用AOT方式的SpringBoot进程通常占用120m物理内存,采用AOT方式占用38m物理内存。

image-20230130162322180

结论:AOT可极大缩短热启动时间和资源消耗

AOT方式虽然延长了构建时间,但运行时的资源消耗会极大降低。

4.开发建议

演讲者给出了4点建议:

  • The paved path to production starts at your laptop.
  • Deploy all the things on your laptop.
  • Scale to zero:Startup quickly, Chaos Happens.
  • Be a better consumer of infrastructure.

这4点建议的本质是:Spring Boot 3.0更强调单体服务的小型化,进而支撑将所有的微服务部署在1台笔记本上。

在1台笔记本上就能把整个产品中的各种微服务都跑起来,才能提升开发效率(尽快Startup,尽快暴露问题)。

小型化一定是有微服务实战经验后才能体会的重要经验

在微服务架构兴起之初,

笔者曾经所在的产品团队仅仅学会了微服务架构的形(把1个单进程盲目地拆解成了N个微服务进程),但没有学会微服务的神(面向接口),

导致开发阶段对服务器等环境资源极度依赖,最终导致开发效率极低。

5.总结

  • 在本议题,演讲者DaShaun提供了AOTmvnd等手段降低单体服务的资源消耗。
  • Spring Boot 3.0的核心思想也是在强调小型化(小到可以部署到1台笔记本上)有助于提升开发效率
  • 小型化微服务架构不仅不矛盾,而且是微服务架构重要的实践经验