<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Spring 官宣,干掉原生 JVM!

          共 5092字,需瀏覽 11分鐘

           ·

          2021-05-15 05:42


          來(lái)源:spring.io/blog/2021/03/11/announcing-spring-native-beta

            Spring 團(tuán)隊(duì)日前發(fā)布了 Spring Native Beta 版。通過(guò) Spring Native,Spring 應(yīng)用將有機(jī)會(huì)與 GraalVM 原生鏡像的方式運(yùn)行。為了更好地支持原生運(yùn)行,Spring Native 提供了 Maven 和 Gradle 插件,并且提供了優(yōu)化原生配置的注解。

            Spring 發(fā)布了 Spring Native 的 beta 版本,并在http://start.spring.io上運(yùn)行它。

            實(shí)際上,這意味著自Spring成立以來(lái),除了Spring支持的常規(guī)Java虛擬機(jī)之外,我們還將添加Beta支持,以使用GraalVM將Spring應(yīng)用程序編譯到本機(jī)映像中,從而提供一種部署Spring應(yīng)用程序的新方法。支持Java和Kotlin。

            這些本機(jī)Spring應(yīng)用程序可以部署為獨(dú)立的可執(zhí)行文件(無(wú)需安裝JVM),并提供有趣的特性,包括幾乎即時(shí)啟動(dòng)(通常<100ms),即時(shí)峰值性能和較低的內(nèi)存消耗,但所需的構(gòu)建時(shí)間和運(yùn)行時(shí)優(yōu)化次數(shù)少于JVM。

            使用簡(jiǎn)單mvn spring-boot:build-imagegradle bootBuildImage命令,您可以生成一個(gè)優(yōu)化的容器映像,該映像將包含一個(gè)最小的OS層和一個(gè)小的本機(jī)可執(zhí)行文件,該映像僅隨附JDK,Spring以及您在應(yīng)用程序中使用的依賴(lài)項(xiàng)中的必需位。請(qǐng)參閱下面的示例,其中包含50MB可執(zhí)行文件的最小容器映像,其中包含Spring Boot,Spring MVC,Jackson,Tomcat,JDK和應(yīng)用程序。

            這種原生方式,在很多場(chǎng)景下都會(huì)對(duì) Spring 應(yīng)用產(chǎn)生價(jià)值:

            • 具有Spring Cloud功能的無(wú)服務(wù)器
            • 以更便宜和更可持續(xù)的方式托管Spring微服務(wù)
            • 非常適合VMware Tanzu等Kubernetes平臺(tái)
            • 想要?jiǎng)?chuàng)建最佳的容器映像來(lái)打包您的Spring應(yīng)用程序和服務(wù)

            在使用場(chǎng)景上,比如 Piotr Mińkowski 提供了一個(gè)非常棒的指南,介紹了如何在 Knative 上使用 Spring Boot 和 GraalVM 構(gòu)建原生微服務(wù)。

            1. 團(tuán)隊(duì)協(xié)作

            Spring Native beta 是整個(gè) Spring 團(tuán)隊(duì)及其家族項(xiàng)目廣泛合作的結(jié)果:Spring Framework、Spring Boot 還包括 Spring Data、Spring Security、Spring Cloud 和 Spring Initializr。

            據(jù)悉,原生功能的工作范圍比 Spring 更廣,因?yàn)樵婕暗礁鼜V泛的 JVM 生態(tài)系統(tǒng),所以官方一直在與 GraalVM 團(tuán)隊(duì)合作,以改善原生鏡像的兼容性和資源消耗。

            以下是來(lái)自 GraalVM 團(tuán)隊(duì)的 Vojin Jovanovic 的一段話。

            “與 Spring 團(tuán)隊(duì)協(xié)作打造原生 JVM 生態(tài)系統(tǒng)是一件非常愉快的事情:他們深厚的技術(shù)知識(shí),再加上對(duì)社區(qū)的敏感觸覺(jué),總是能帶來(lái)最好的解決方案。最新的 Spring Native 版本,以及它在 JVM 生態(tài)系統(tǒng)中的眾多用法,為原生編譯的廣泛采用鋪平了道路。”

            2.支持范圍

            隨著Spring Native從alpha過(guò)渡到beta,我認(rèn)為弄清我們提供的支持范圍很重要。

            Alpha是第一步,我們進(jìn)行了大量試驗(yàn)并完善了Spring Native(以前稱(chēng)為Spring GraalVM Native)的體系結(jié)構(gòu),兼容性和對(duì)一系列樣本進(jìn)行了重大更改的封裝。我們還報(bào)告了GraalVM團(tuán)隊(duì)修復(fù)的許多問(wèn)題,目的是縮小JVM與Spring應(yīng)用程序的本機(jī)之間的差距。

            雖然仍被認(rèn)為是實(shí)驗(yàn)性的,但beta意味著Spring現(xiàn)在為Spring生態(tài)系統(tǒng)的子集提供了對(duì)native的支持。如果項(xiàng)目正在使用受支持的依賴(lài)項(xiàng),則可以在項(xiàng)目上進(jìn)行嘗試;如果出現(xiàn)問(wèn)題,則引發(fā)錯(cuò)誤或提出請(qǐng)求請(qǐng)求。最新版本的Spring Boot 2.x次要版本的每個(gè)修補(bǔ)程序版本都會(huì)出現(xiàn)一個(gè)新版本的Spring Native。Spring Native 0.9.0支持Spring Boot 2.4.3,Spring Native 0.9.1支持Spring Boot 2.4.4,等等。雖然會(huì)發(fā)生一些重大變化,但我們將記錄遷移路徑。文檔質(zhì)量達(dá)到了一個(gè)新的水平:參考文檔以html單頁(yè)或pdf的形式提供],并且我們發(fā)布了本機(jī)提示的Javadoc公共API。

            3.start.spring.io

            Stéphane Nicoll 在對(duì) http://start.spring.io 和相關(guān) IDE 的集成中,引入了對(duì) Spring Native 的支持,所以現(xiàn)在這是探索如何使用 Spring 構(gòu)建原生應(yīng)用最簡(jiǎn)單的方式。

            添加 Spring Native 依賴(lài)后將會(huì)使用所需的依賴(lài)和插件自動(dòng)配置 Maven 或 Gradle 項(xiàng)目,以便于支持原生。應(yīng)用代碼本身沒(méi)有變化。

            請(qǐng)檢查自動(dòng)生成的 HELP.md 文件,該文件包含了有用的鏈接和文檔,同時(shí)它還能標(biāo)記出來(lái)你是否選擇了一些在原生環(huán)境下不支持的依賴(lài)。

            4. 提前轉(zhuǎn)換

            本機(jī)不同于JVM:類(lèi)路徑在構(gòu)建時(shí)是固定的,例如需要反射或資源進(jìn)行配置,沒(méi)有類(lèi)延遲加載(可執(zhí)行文件中附帶的所有內(nèi)容在啟動(dòng)時(shí)都加載到內(nèi)存中),并且可以調(diào)用一些代碼在構(gòu)建時(shí)。

            為了充分體現(xiàn)這些特性并允許Spring應(yīng)用程序在本機(jī)上以最大的兼容性和最小的占用空間運(yùn)行,Brian Clozel在此版本中引入了Spring提前(AOT)Maven和Gradle插件,它們可以提前執(zhí)行您的應(yīng)用程序上的轉(zhuǎn)換。

            第一種轉(zhuǎn)換旨在基于由驚人的Andy Clement設(shè)計(jì)和實(shí)現(xiàn)的推理引擎來(lái)生成GraalVM本機(jī)配置(反射,資源,代理,本機(jī)映像選項(xiàng)),該引擎了解什么是Spring編程模型和基礎(chǔ)架構(gòu)。例如,對(duì)于每個(gè)由注釋的類(lèi)@Controller,一個(gè)條目將被添加到生成的reflect-config.json文件中。

            無(wú)法推斷出某些本機(jī)配置,對(duì)于這些情況,我們引入了本機(jī)提示注釋?zhuān)ㄓ嘘P(guān)更多詳細(xì)信息,請(qǐng)參見(jiàn)Javadoc),這使Spring Native可以比基于常規(guī)JSON的本機(jī)圖像配置更可維護(hù),類(lèi)型安全和靈活地支持本機(jī)配置。例如同春本地MySQL驅(qū)動(dòng)支持提供線索,讓一代機(jī)映像正確的條目reflect-config.jsonresource-config.json以及native-image.properties如下:

            @NativeHint(
                trigger = Driver.class,
                options 
            "--enable-all-security-services",
                types = @TypeHint(types = {
                   FailoverConnectionUrl.class,
                   FailoverDnsSrvConnectionUrl.class,
                   // ...
                }), resources 
            = {
                @ResourceHint(patterns = "com/mysql/cj/TlsSettings.properties"),
                @ResourceHint(patterns = "com.mysql.cj.LocalizedErrorMessages",
                                  isBundle = true)
            })
            public class MySqlHints implements NativeConfiguration {}

            NativeConfiguration和其他動(dòng)態(tài)配置機(jī)制允許更強(qiáng)大的和動(dòng)態(tài)的配置生成,但要注意它們的API將在即將到來(lái)的版本演變了很多。

            Spring開(kāi)發(fā)人員還可以使用特定于應(yīng)用程序的本機(jī)提示直接注釋其@Configuration@SpringBootApplication類(lèi),例如,Book通過(guò)諸如RestTemplate或的編程API將類(lèi)序列化為JSON WebClient

            @TypeHint(types = Book.class)
            @SpringBootApplication
            public class WebClientApplication 
            {
                // ...
            }

            與提前轉(zhuǎn)換系統(tǒng)一起使用時(shí),最后一種可能是最強(qiáng)大的機(jī)制是使用Spring Boot部署模型與GraalVM native結(jié)合引入的封閉世界假設(shè)自動(dòng)生成本機(jī)優(yōu)化代碼(源代碼和字節(jié)碼)的功能。圖像特征。這里的目標(biāo)是通過(guò)使用本機(jī)圖像編譯器可以開(kāi)箱即用地分析的代碼構(gòu)造來(lái)限制所需的額外本機(jī)配置的數(shù)量,以提高兼容性,并通過(guò)減少反射所需的配置數(shù)量來(lái)減少占用空間,資源或代理。一個(gè)具體的例子是各種形式的提前轉(zhuǎn)換spring.factories (Spring Boot背后的擴(kuò)展機(jī)制)到優(yōu)化的程序設(shè)計(jì)版本,該版本不需要反射,并且可以在應(yīng)用程序的上下文中過(guò)濾掉不必要的條目。

            這只是Spring AOT的開(kāi)始,我們打算向[@Configuration功能配置中添加更強(qiáng)大的轉(zhuǎn)換,以通過(guò)提前分析來(lái)替換運(yùn)行時(shí)反射,該提前分析將自動(dòng)生成配置類(lèi),這些配置類(lèi)將使用lambda和方法引用之類(lèi)的程序化構(gòu)造。這將使GraalVM本機(jī)圖像編譯器可以立即了解Spring配置,而無(wú)需任何反射配置或*.class資源。

            要記住的一個(gè)關(guān)鍵點(diǎn)是,在使用Spring Native時(shí),默認(rèn)情況下在JVM上也會(huì)使用AOT生成的代碼,以允許您使用JVM允許的短反饋循環(huán)來(lái)行使“本機(jī)友好的代碼路徑”。您的調(diào)試器和所有常規(guī)工具。

            盡管Spring AOT轉(zhuǎn)換當(dāng)前主要由本機(jī)需求驅(qū)動(dòng),但是其中許多不是本機(jī)特定的,并且可能其中一些可以提供優(yōu)化以在JVM上運(yùn)行Spring Boot應(yīng)用程序。與此類(lèi)主題一樣,重要的是數(shù)據(jù)驅(qū)動(dòng),以便我們測(cè)量效率和績(jī)效來(lái)決定我們的決策。

            我們可能會(huì)改進(jìn)IDE的集成,現(xiàn)在確保在IDE中運(yùn)行應(yīng)用程序之前,請(qǐng)先閱讀相關(guān)文檔以進(jìn)行潛在的手動(dòng)配置步驟,以更新生成的源代碼。

            5. 結(jié)論

            Spring戰(zhàn)略要本地化有兩個(gè)主要支柱。第一個(gè)是使Spring基礎(chǔ)結(jié)構(gòu)適應(yīng)本機(jī),而無(wú)需對(duì)數(shù)百萬(wàn)個(gè)現(xiàn)有的Spring Boot應(yīng)用程序進(jìn)行重大更改。其中包括我們?cè)赟pring頂級(jí)項(xiàng)目中所做的更改,以使其對(duì)本機(jī)友好,@NativeHint我們將在Spring Native中成熟的基礎(chǔ)架構(gòu)(例如)和Spring AOT構(gòu)建插件。

            第二個(gè)支柱比Spring本身更廣泛,native是一個(gè)具有與JVM不同的特性的平臺(tái),但是Java生態(tài)系統(tǒng)需要盡可能地一致,以避免兩種非常不同的Java風(fēng)格,這將難以維護(hù)。這就是為什么我們與GraalVM團(tuán)隊(duì)進(jìn)行深入合作以縮小這一差距的原因。在接下來(lái)的幾個(gè)月中,這項(xiàng)合作將專(zhuān)注于為更廣泛的JVM生態(tài)系統(tǒng)改善本機(jī)測(cè)試和本機(jī)配置。

            瀏覽 46
            點(diǎn)贊
            評(píng)論
            收藏
            分享

            手機(jī)掃一掃分享

            分享
            舉報(bào)
            評(píng)論
            圖片
            表情
            推薦
            點(diǎn)贊
            評(píng)論
            收藏
            分享

            手機(jī)掃一掃分享

            分享
            舉報(bào)
            <kbd id="afajh"><form id="afajh"></form></kbd>
            <strong id="afajh"><dl id="afajh"></dl></strong>
              <del id="afajh"><form id="afajh"></form></del>
                  1. <th id="afajh"><progress id="afajh"></progress></th>
                    <b id="afajh"><abbr id="afajh"></abbr></b>
                    <th id="afajh"><progress id="afajh"></progress></th>
                    国产午夜在线 | 日批视频免费观看 | 操逼免费观看视频 | 狼友视频主页 | 天天干天天曰 |