《劉軍-面向云時代的開發框架與運行時探索.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