備註:

TASK 5:建立 Micronaut 應用程式的原生影像,並部署到 Oracle Cloud

在此實驗室中,您將瞭解如何使用 GraalVM 原生映像檔將您的 Java 應用程式轉換成原生 Linux 執行檔。部署到 Oracle Cloud 中的虛擬機器之後。

預估時間:20 分鐘

任務內容

在此工作中,您將:

步驟 1:在 Oracle Cloud 的 JVM 上執行 Micronaut 應用程式

在此步驟中,您將在 Oracle Cloud 中的 JVM (從 JAR 檔案) 傳統部署 Micronaut 應用程式。您要繼續使用 VS 程式碼,其中的 GraalVM Enterprise 22.0.0 設為預設 JDK。

  1. 前往終端機新終端機,然後執行此命令來驗證 Java 版本:

    java -version
    

    隨時您呼叫 java 命令時,預設會套用在 GraalVM Enterprise 中啟用的最佳化 Graal JIT 編譯器。

  2. 您可以將 Java 專案封裝成可執行的 JAR 檔案,並從 VS Code 終端機啟動應用程式,或是呼叫執行主要動作。

    • 前往終端機新終端機,然後執行 mn:run 目標:

      ./mvnw mn:run
      

      如果您是使用 Gradle,請執行 run 工作:

      ./gradlew run
      
    • 或者,在 VS 程式碼中找到 Application.java 類別檔案,按一下 main 方法上方的執行主要

      執行主要方式快速動作

      應用程式從連接埠 8080 開始。請注意啟動它所花費的時間 (預期會在 ~6500 毫秒內開始)。

  3. 終止應用程式:

    CTLR +C
    

步驟 2:建立 Micronaut 應用程式的原生 Linux 執行檔

您可以使用 GraalVM 原生映像檔,將所有 Java 應用程式轉換成原生執行檔。它是一個預先時間的編譯技術,可讓您將 Java 位元組碼轉換成獨立的原生二進位檔 (不需要 JDK 執行),並且是針對特定的目標環境進行設計。

如上所述,為方便使用者,您的虛擬機器上會預先安裝 GraalVM Enterprise 22。相同「原生影像」,會與所有相依程式庫一起新增 (例如,libstdc++-staticglibczlib 等)。native-image 公用程式會置於 GraalVM 安裝目錄 ($JAVA_HOME/bin)。

  1. 在「VS 代碼終端機」視窗中,驗證「原生影像」版本:

    native-image --version
    
  2. 執行此單一命令以建立原生 Linux 執行檔:

    • 如果您使用 Maven,請指定 native-image 封裝格式:

    ./mvnw clean package -Dpackaging=native-image
    
    • 如果您是使用 Gradle,請執行 nativeImage 工作:

    ./gradlew nativeCompile
    

    在某些時間後,名為 ocidemo 的原生執行檔就會內建在 /target/native-image/ 目錄中。如果您是使用 Gradle,稱為 ocidemo 的執行檔將會寫入 /build/native/nativeCompile/ 資料夾。

    注意:建置可執行檔的時間取決於應用程式大小和複雜性,而且在低電源 VM 上可能需要一些時間。使用配置給此實驗室的 VM 執行處理容量,預期的時間為 5 分鐘。

「GraalVM 原生映像檔」會建立包含所有應用程式類別、相依程式庫類別、相依 JDK 類別以及應用程式堆集之快照的執行檔案。儘管建立原生影像需要一些時間,其優點包括啟動時間大幅減少,以及減少整體記憶體的使用。

步驟 3:在 OCI 部署您的 Micronaut 應用程式

在上一個步驟中,建立 Micronaut 應用程式的原生 Linux 執行檔。現在,您會在 Oracle Cloud 中部署此原生執行檔,然後比較從 JAR 檔案執行相同應用程式時,以及原生映像檔的啟動時間。

若要將應用程式部署為原生執行檔,請呼叫上一個步驟中產生的二進位檔:

./target/ocidemo

./build/native/nativeCompile/ocidemo

請注意,啟動這個 Micronaut 微服務所需的速度,比步驟 1 的 JAR 檔案還快多少 (應該從 6500 毫秒跳到 2500 毫秒)。這樣的啟動速度更快,因為執行檔是獨立的二進位檔,不需要 JDK 執行,讓應用程式可以輕鬆散佈。檔案大小也很小。

將 Java 微服務部署為原生執行檔,有助於即時啟動、降低 CPU 和記憶體使用量,讓 GraalVM Enterprise 成為建置雲端原生 Java 應用程式和雲端部署的理想人選。

應用程式目前已順利執行,但若要透過瀏覽器存取應用程式,您必須允許將內送流量傳送至虛擬機器。終止應用程式 CTRL+C,然後繼續下一個步驟。

步驟 4:設定防火牆以允許通往雲端執行處理 (選擇性)

若要確認此伺服器端應用程式在 Oracle Cloud 中執行並以瀏覽器開啟,您必須確保主機防火牆允許對您的虛擬機器進行流量。

  1. 回到雲端主控台,依序瀏覽至運算執行處理

  2. 當您登入 OCI 主控台時,請瀏覽至運算,然後按一下執行處理。確定您位於必要的區間 (請參閱工作 1 步驟 3)。

    尋找運算執行處理

  3. 在主要檢視中尋找 VM 執行處理 (以 graal-workshop-... 開頭的名稱),然後開啟它。

  4. 主要 VNIC 區段中,按一下執行處理所連附的子網路 (subnet-01)。

  5. 在子網路頁面上,按一下內部安全清單

  6. 新增傳入規則並填入下列資料。

    新增允許內送流量至連接埠的傳入規則

    此規則可讓所有來源的流量使用連接埠 8080,以便從任何地方連線至應用程式。

  7. 返回終端機視窗,然後執行下列命令重新啟動執行中 VM 執行處理的防火牆。

    sudo firewall-cmd --permanent --add-port=8080/tcp
    

    sudo systemctl reload firewalld
    
  8. 以原生執行檔重新啟動應用程式。

    建立於 Maven:

    ./target/ocidemo
    

    使用 Gradle 建立的:

    ./build/native/nativeCompile/ocidemo
    
  9. 使用 http://<SERVER_IP>:8080/pets 開啟瀏覽器中的 /pet 端點的應用程式,以及 /owners 端點的 http://<SERVER_IP>:8080/owners。或者,以 VS 程式碼分割終端機視窗,並使用 curl 傳送 GET 要求:

    curl -i http://<SERVER_IP>:8080/pets
    

恭喜!您已順利完成此實驗室。

深入瞭解

若要結束此階段作業,請按一下工具列中的「結束階段作業」按鈕。