SpringOne 2022第2个议题《Introducing Spring Boot 3.0》,主要展示Spring Boot 3.0的性能以及要点,演讲者:DaShaun Carter。
1.测试前提
硬件
演讲者强调了测试的两款典型的CPU:Apple M1
和Raspberry 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
被测对象
执行如下脚本,可获得被测对象:
|
|
代码归档
测试代码归档在此:
https://github.com/dashaun/spring-boot-3-with-aot-processing
Java版本
采用GraalVM:
2.测试:mvnw vs mvnd
演讲者对比测试了mvnw clean package
和mvnd clean package
,对比了mvnw
和mvnd
的性能差异。
mvnw clean package
测试结果:8.3s
mvnd clean package
测试结果:5.6s
结论:mvnd
构建性能优于mvnw
对mvnd的延伸阅读
mvnd
也是一种maven wrapper,相比mvnw
性能更好。详细资料如下:
3.测试:GraalVM AOT
演讲者展示了采用AOT
技术构建Spring Boot 3.0应用,体现了性能的差异。
mvnw -Pnative native:compile
- 构建时间延长至分钟级:使用
mvnw -Pnative native:compile
构建,构建时间长达6分钟。
- 启动时间缩短50%:未采用
AOT
方式的SpringBoot进程启动时间通常在1.5s左右,采用AOT
方式缩短至0.7s。
- 资源消耗下降66%:未采用
AOT
方式的SpringBoot进程通常占用120m物理内存,采用AOT
方式占用38m物理内存。
结论: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提供了
AOT
、mvnd
等手段降低单体服务的资源消耗。 - Spring Boot 3.0的核心思想也是在强调小型化(小到可以部署到1台笔记本上)有助于提升开发效率。
- 小型化与微服务架构不仅不矛盾,而且是微服务架构重要的实践经验。