《刘军-面向云时代的开发框架与运行时探索.pdf》由会员分享,可在线阅读,更多相关《刘军-面向云时代的开发框架与运行时探索.pdf(28页珍藏版)》请在三个皮匠报告上搜索。
1、面向云时代的开发框架与运行时探索演讲人:刘军Apache Dubbo PMC Chair阿里云服务框架负责人CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJava
2、Week 20231.Java 应用在云时代面临的挑战2.GraalVM Native Image 简介3.AOT Processing4.Spring6+Dubbo3 示例演示目录CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJ
3、avaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Java 应用在云时代面临的挑战1CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 202
4、3CoreJavaWeek 2023Java 仍是当前最流行的开发语言之一CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Java 是一款
5、非常成熟、流行度非常高的编程语言,全世界有无数的 Java 开发者和基于 Java 开发的应用但在云时代,使用 Java 的应用开发、部署和运行面临诸多挑战CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023C
6、oreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Java 在云时代面临的
7、挑战 “冷启动”耗时 无法满足 Serverless 等的快速弹性 应用预热时长过长 无法在短时间内达到最佳状态 资源占用高 内存等资源要求过高 二进制包体积大 CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 20
8、23CoreJavaWeek 2023CoreJavaWeek 2023GraalVM Native Image 简介GraalVM 简介、什么是 Native Image2CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaW
9、eek 2023CoreJavaWeek 2023CoreJavaWeek 2023GraalVM 简介GraalVM compiles your Java applications ahead of time into standalone binaries that start instantly,provide peak performance with no warmup,and use fewer resources.1.GraalVM 是一个完整的 JDK 发行版本(Graal Compiler)与 OpenJDK 对等,你可以运行任何 JVM-based 的应用2.提供 Nati
10、ve Image 打包技术,将应用打包为可以独立运行的二进制包自包含的、可脱离 JVM 运行的应用程序CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWee
11、k 2023 低资源消耗 快速启动 压缩打包 增强的安全性 跨平台问题GraalVM 核心目标CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 20
12、23CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaW
13、eek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Whats Native ImageNative Image 是一项将 Java 代码编译打包为 Native Executable 的技术 即可执行的二进制程序。一个 nat
14、ive executable 仅包含运行期需要的代码:应用自身代码、标准依赖包、语言运行时、JDK 库关联的静态代码。Native Image 技术打包的可执行程序有以下几项一些特点:仅包含 JVM 运行所需的一部分资源,运行成本更低毫秒级的启动时间启动后即进入最佳状态,无需预热可打包为更轻量的二进制包,让部署速度更快更高效安全程度更高CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
15、 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Native Image 的优势CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJav
16、aWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023使用 GraalVM 创建 Native Image 1.安装 native-image 工具依赖包 sudo yum install gcc glibc-devel zlib-devel 下载bash(curl-sL https:/get.graalvm.org/jdk)$JAVA_HOME/bin/native-image2.Native Image 打包javac HelloWorld.java na
17、tive-image HelloWorld3.Maven 和 Gradle 插件集成CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023从原理
18、上分析 Native Image 与 JVM 部署的差异GraalVM Native Image 带来的 AOT 静态编译特性,使得 Native Executable 的运行模式与传统 JVM 模式有很大区别。GraalVM 在编译构建期间就会以 main 函数为入口,完成对应用代码的静态分析在静态分析期间无法被触达的代码,将会被移除,不会包含在最终的二进制包中GraalVM 无法识别代码中的一些动态调用行为,如反射、resource资源加载、序列化、动态代理等都动态行为都将受限Classpath 在构建阶段就固化下来,无法修改不再支持延迟的类加载,所有可用类和代码在程序启动阶段就确定了还有
19、一些其他的 Java 应用能力是受限使用的(比如类初始化提前等)CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Native Image
20、的使用限制“closed world assumption”,编译期间静态分析应用,并打包为可执行程序。反射与动态代理动态资源、类加载类初始化基于反射的能力,JNI、序列化等生态配套,如 Debug 工具等CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWe
21、ek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Reachibility Metadata2.提供额外的 JSON 配置文件,可默认放在 META-INF/native-image/目录。1.在 Image 构建的时候,通过分析代码计算 Metadata 并且将内容存储到静态包的初始堆栈中。CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023C
22、oreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023AOT ProcessingSpring6&Dubbo3 中的 AOT Processing 机制3CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
23、2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023自动Metadata扫描 AOT ProcessingCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2
24、023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023 Spring Spring AOT processing Dubbo Dubbo AOT processing Third-party libraries Reachability MetadataAOT Processing is framework specific!以一个 Spring+Dubbo 开发的微服务应用为例CoreJavaWeek 2
25、023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Spring AOTSpring Beans Source Code GenerationHint File Gene
26、ration(Reflection etc.)Proxy Class GenerationCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023
27、Dubbo AOTSPI source code generationHint File Generation(Reflection etc.)RPC Proxy Class GenerationCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 20
28、23CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023Spring6+Dubbo3 示例演示演示如何将 Spring6&Dubbo3 开发的应用进行静态化打包4CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJav
29、aWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023示例 SpringBoot3+Dubbo3CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2
30、023CoreJavaWeek 2023CoreJavaWeek 2023示例 SpringBoot3+Dubbo3由于 Spring6 开始支持 Native,因此需要引入 dubbo-spring6 适配服务发现 等第三方组件支持:网络通信组件:Netty、Fastjson2通用基础组件:Slf4j+Logback微服务治理套件:Nacos、Zookeeper、Sentinel、SeataCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023
31、CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023示例 SpringBoot3+Dubbo31.Native Image 打包mvn clean install-P native native:compile2.运行 Native Executable./target/native-demo3.运行time-f Elapsed Time:%e
32、 s Max RSS:%M KB./helloworld#Hello,Native World!#Elapsed Time:0.00 s Max RSS:7620 KBCoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek
33、 2023CoreJavaWeek 2023CoreJavaWeek 2023感谢聆听演讲人:刘军Apache Dubbo PMC Chair阿里云服务框架负责人CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023CoreJavaWeek 2023