SpringBoot3知识汇总
# SpringBoot3知识汇总
# AOT 与 JIT 的介绍
# 含义说明
JIT(Just-in-Time,实时编译)-- Java 跨平台的基础
AOT(Ahead-of-Time,预编译或提前编译)-- 无法跨平台
# AOT 的优点
- 启动和运行速度快
- 打包体积小
主要是为了朝云原生方向发展
# 什么是云原生?
云原生,为云而生。
云原生(Cloud Native)是一种构建和运行应用程序的方法,旨在充分利用云计算环境的优势。它强调通过容器化应用程序组件、微服务架构、动态编排和自动化管理来实现敏捷性、可伸缩性、弹性和高可用性。
关键的云原生特征包括:
- 容器化: 将应用程序和其所有依赖项封装到容器中,确保在不同环境中的一致性运行。
- 微服务架构: 将应用程序划分为小型、独立、可独立开发和部署的服务,提高灵活性和可维护性。
- 动态编排: 使用容器编排工具(例如 Kubernetes)自动化容器的部署、伸缩、负载均衡和故障恢复。
- 持续交付: 强调自动化的构建、测试和部署流程,以实现更频繁和可靠的交付。
- 敏捷性: 采用敏捷开发和敏捷运维原则,鼓励快速迭代和持续改进。
- 弹性和可伸缩性: 可以动态地适应负载变化,实现弹性和可伸缩的应用程序架构。
- 服务发现和治理: 提供服务发现和治理机制,确保微服务之间的通信和协同。
- 日志和监控: 强调在整个应用程序生命周期中的日志记录和监控,以便实时了解应用程序的状态和性能。
- 多租户和云原生安全: 考虑在云环境中的多租户需求,并强调云原生安全的实践。
这些原则和实践使得云原生应用程序更容易部署、扩展和管理,并能更好地利用云计算平台的优势。Kubernetes 是当前广泛使用的云原生技术之一,用于容器编排和管理。
# AOT 的缺点
- 编译后的程序不支持跨平台
- 不支持动态功能,如 AOP
- 因为是预编译的,所以就没有了 AOP 这种面向切面编程的功能。
# JIT 在高并发场景中的生产问题
# 生产问题现象
前提
要超过一定的并发量。
现象
热点应用重启后,出现业务超时,几分钟后恢复正常。
解析
重启后大量请求进来,导致多个类同时触发 JIT 超时,导致机器 CPU 升高,性能下降。
执行方式
- JVM 混合执行模式初期以解释方式执行,执行效率慢;
- 当【执行次数 / 频率】达到指定阀值后,促发 JIT 编译后;编译后,以机器指令码方式执行,执行效率提高。
细节分析
- 启动初期:应用以解释执行,执行效率较慢,CPU 有所上升
- 触发 JIT 编译:CPU&load 飙高,使请求堆积线程池满,出现请求处理超时的情况
- JIT 编译后:CPU 降低,请求处理较之前快,服务逐步恢复。
# 解决办法
- 预热:初始让程序自动运行热点代码几百次
- 流量控制:启动时小流量,运行几分钟后再放到正常流量
# SpringBoot3-GraalVM 代替 JDK 实现 AOT
什么是 GraalVM ?
GraalVM 是一个跨语言的通用虚拟机,不仅支持了 Java、Scala、Groovy、 Kotlin 等基于 JVM 的语言,以及 C、C++ 等基于 LLVM 的语言,还支持其它像 JavaScript、Ruby、Rust、Python 和 R 语言等。
参考文章
使用GraalVM 构建 Spring Boot 3.0 原生可执行文件-腾讯云开发者社区-腾讯云 (tencent.com) (opens new window)
上次更新: 2024/9/25 11:16:13