在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Java云原生微服務框架Quarkus入門實踐

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-03 14:15 ? 次閱讀


1. 概述

1.1 定義

Quarkus定位要做超聲速、亞原子的Java框架,使用最好標準為OpenJDK HotSpot和GraalVM量身定制的Kubernetes Native Java棧;從一開始就是針對Kubernetes設計的云原生優化Java應用開發框架;兼容主流的框架開發模式如Jpa、Netty、Undertow、Hibernate、JWT、Spring。最新版本為2.13.3。

  • Quarkus 官網:https://quarkus.io/
  • Quarkus GitHub:https://github.com/quarkusio/quarkus

1.2 GraalVM 簡介

GraalVM 是 Oracle 開發的高性能的多語言運行時 JDK,旨在提高 Java 應用程序的性能,同時消耗更少的資源。

GraalVM 提供了兩種運行Java應用程序的方法:在HotSpot JVM上使用 Graal 即時(JIT)編譯器或者作為預先(AOT)編譯的本機可執行文件。

除了 Java,它還提供了 JavaScript、Ruby、Python 和其他一些流行語言的運行時。GraalVM 的多語言功能使得在一個應用程序中混合編程語言成為可能,同時消除了任何外語調用成本。目前最新版本為 22.3。

cd27fac4-5b3d-11ed-a3b6-dac502259ad0.png
  • GraalVM 可以創建原生可執行文件;
  • GraalVM 提供的原生鏡像(native image)功能可以把Java代碼預先編譯(Ahead-Of-Time,AOT)成獨立的可執行文件。該可執行文件包括了應用本身的代碼、所依賴的第三方庫和 JDK 本身。該執行文件并不運行在 Java 虛擬機之上,而是名為 Substrate 的虛擬機。與運行在傳統的 Java 虛擬機上相比,原生可執行文件在運行時的啟動速度更快,所耗費的內存資源更少。可執行文件的體積也更小;
  • GraalVM 生成的原生可執行文件與底層平臺相關,不能在當前平臺之外的其他平臺上運行。但對云原生應用來說,這并不是一個問題。云原生應用的設計目標是在容器中運行,所運行的底層平臺是固定的。

1.3 為何使用

使用 Spring Boot 的快速開發企業級應用的微服務啟動慢,從一個應用從啟動到服務可用,一般是數秒。在對 CPU 核數和內存嚴格限制的情況下,花數十秒啟動的情況也屢見不鮮。這樣的問題無法適應需要快速重啟或快速擴容的場景。不僅如此,內存消耗也很大。如果限制在 1G 時 FullGC 頻率變大,且經常觸發 OMM 后 Kill 導致 pod 重啟,并且啟動時間也會變長。

相比之下,集群中使用 GO 語言開發的應用則配置 128M 內存也可正常使用。以 JVM 模式運行的 Java 應用,并不太適合于云原生應用的開發,而擁抱云原生則是未來技術的大趨勢。

容器云已經為未來主流,也即是軟件都是運行在 K8S 這樣的容器集群里。而容器環境需要應用具備啟動速度快,資源占用小,響應時間短等特性。Quarkus 順應這種趨勢而生的。

  • 對于云原生應用來說,平臺無關性變得無關緊要。云原生應用都是以容器化的形式運行的,所運行的底層平臺是固定的;
  • 云原生應用對啟動速度的要求比較高。當需要進行水平擴展時,要求這些新的實例必須在足夠短的時間內完成啟動,從而盡快的處理新增的請求;
  • 云原生應用要求在運行時占用盡可能少的資源。盡可能的減少單個實例占用的資源,就意味著可以用同樣的成本,支持更多的訪問請求;
  • 云原生應用要求更小的打包體積。云原生應用以容器鏡像的形式打包。應用鏡像的尺寸越大,所需要的存儲空間也會越大,推送和拉取鏡像所耗費的時間也會更長。

Quarkus具備企業級應用開發能力。

在 Serverless 服務器架構、微服務、容器、Kubernetes、功能即服務(FaaS)和云環境中運行 Java 而言,考慮了所有這些因素的 Quarkus 堪稱是一個有效的解決方案。

1.4 特性

容器優先

構建期即生成云原生鏡像執行文件。

Quarkus 為 GraalVM 和 HotSpot 定制應用程序。快速啟動、低內存消耗、體積小,在 Kubernetes 這樣的容器編排平臺上提供了近乎實時的擴展和高密度的內存利用率。這就是使用了編譯時引導的技術。

  • 支持 Graal/SubstrateVM
  • 構建時元數據處理
  • 盡量減少 JNI 調用
  • 減少反射的使用
  • 本機映像預啟動

Kubernete 原生

構建期即生成云原生鏡像執行文件,可以與 Docker 和 Kubernetes 輕松集成,Quarkus 和 Kubernetes 的組合可以伸縮、快速創建輕量級的應用程序。Quarkus 通過工具、預構建的集成、應用程序服務等顯著提高了開發人員的工作效率。

命令式和響應式

在設計上 Quarkus 能夠在開發應用時無縫地結合熟悉的命令式代碼和非阻塞、響應式樣式。這對于習慣使用命令式模型而不想切換風格的 Java 開發人員以及使用云原生/響應式方法的開發人員都非常有用。

社區和標準

擁抱 JavaEE 標準,使用 JavaEE 官方 RESTful、CDI 等標準接口。Quarkus 提供了一個內聚的、輕量的全棧框架,包含超過 50 個使用的最佳類庫。

開發者友好

學習成本也低,具有統一的配置和簡單的本地可執行文件生成,零配置,實時重新加載,80% 的常用標準和 20% 靈活應用。

1.5 官方性能數據

cd3b8238-5b3d-11ed-a3b6-dac502259ad0.png

從圖中可以看出,使用 Quarkus 和 GraalVM 的簡單的 REST 應用的啟動時間僅為 16 毫秒,占用內存僅 12MB。如果使用傳統的基于 Java 虛擬機實現,應用的啟動時間需要 4.3 秒,占用內存為 136MB。

基于 Spring Boot + MyBatis Plus + Vue & Element 實現的后臺管理系統 + 用戶小程序,支持 RBAC 動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能

  • 項目地址:https://gitee.com/zhijiantianya/ruoyi-vue-pro
  • 視頻教程:https://doc.iocoder.cn/video/

2. 實戰

入門示例項目步驟:

  • 安裝 GraalVM
  • 創建 Quarkus工程
  • IDEA 導入項目
  • IDEA 編碼運行和調試
  • 打包成普通的 jar
  • 打包成依賴 GraalVM 的二進制文件
  • 打包成不依賴 GraalVM 的二進制文件
  • 制作成 Docker 鏡像

2.1 安裝 GraalVM

GraalVM 官方文檔:https://www.graalvm.org/22.2/docs/

GraalVM GitHub:https://github.com/graalvm/graalvm-ce-builds/releases

了解 GraalVM 的最新版本 22.3 的使用可以查閱 GraalVM 官方文檔。先從 GitHub 下載 GraalVM 。這里先以下載windows版本為例,下載后的文件 graalvm-ce-java11-windows-amd64-22.2.0.zip,解壓到本地磁盤目錄,查看版本信息如下:

cd51bcf6-5b3d-11ed-a3b6-dac502259ad0.png
>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現的后臺管理系統+用戶小程序,支持RBAC動態權限、多租戶、數據權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#windows
PATH環境變量增加路徑:D:ProgramFilesJavagraalvm-ce-java11-22.2.0in
JAVA_HOME配置環境變量:D:ProgramFilesJavagraalvm-ce-java11-22.2.0

#linux
wgethttps://github.com/graalvm/graalvm-ce-builds/releases/download/vm-22.2.0/graalvm-ce-java17-linux-amd64-22.2.0.tar.gz
tar-xvfgraalvm-ce-java17-linux-amd64-22.2.0.tar.gz

exportGRAALVM_HOME=/home/commons/graalvm-ce-java17-22.2.0
exportPATH=$PATH:$GRAALVM_HOME/bin
exportJAVA_HOME=${GRAALVM_HOME}
exportPATH=$PATH:$JAVA_HOME/bin
exportMAVEN_HOME=/home/commons/apache-maven-3.8.6
exportPATH=$PATH:$MAVEN_HOME/bin

2.2 創建 Quarkus 工程

萬丈高樓平地起,首先是創建 Quarkus 項目。與 Spring Boot類似,Quarkus 為我們提供了多種方式創建 Quarkus 工程,下面對常用的 3 種進行介紹。

IDEA 支持創建 Quarkus 項目

cd607f98-5b3d-11ed-a3b6-dac502259ad0.png

maven 命令支持創建(使用的是 apache-maven-3.8.6)

mvnio.quarkuscreate-DprojectGroupId=cn.itxs-DprojectArtifactId=quarkus-web-demo-m-DprojectVersion=1.0-SNAPSHOT-DclassName=FirstResource-Dpath=actions

通過官方提供 Quarkus 代碼生成 https://code.quarkus.io/ 頁面在線創建,這種方法直觀且簡單(不用記命令),推薦使用。添加自己的 maven 配置,然后下載網站生成的工程包。

cd76e620-5b3d-11ed-a3b6-dac502259ad0.png

我們先以第三種為例說明,通過在線網頁生成 quarkus-web-demo.zip。解壓后用 tree 命令看看項目結構,是一個標準的 maven 工程,多了個 docker 目錄,里面有幾個 Dockerfile 文件相關的問題。

目錄結構如下:

cd9f54b6-5b3d-11ed-a3b6-dac502259ad0.png

2.3 IDEA 導入項目

IDEA 導入上面的 Maven項目,幾分鐘下載依賴后項目已成功導入。可以看到 Quarkus 項目的 pom 文件核心依賴為 quarkus-bom。Quarkus 官方認為傳統的接口就是一個個對外方法的資源,所以在 Quarkus 里面是以 Resource 資源的概念來進行的。

cdacad46-5b3d-11ed-a3b6-dac502259ad0.png

2.4 IDEA 運行和調試

在 IDEA 要運行和調試 Quarkus 的項目,首先得在項目添加 SDK,并將路徑指向剛才解壓的目錄。

cdc22e46-5b3d-11ed-a3b6-dac502259ad0.png

修改項目的 GreetingResource 源文件示例方法返回值內容"Hello ITXS RESTEasy",同樣也修改單元測試 GreetingResourceTest 的測試方法的值為上面的內容,在運行菜單中點擊添加新的 Quarkus 配置。

cddff48a-5b3d-11ed-a3b6-dac502259ad0.png

新建后點擊運行按鈕(mvn compile quarkus:dev ),正常運行輸出日志如下:

cdfed396-5b3d-11ed-a3b6-dac502259ad0.png

訪問本地 http://localhost:8080/hello 后可以看到正確的返回結果,同樣也可以直接點擊調試按鈕進入調試模式。

ce217694-5b3d-11ed-a3b6-dac502259ad0.png

2.5 打包成普通的 Jar

通過 maven 的 package 打包后,生成打包目錄如下:

ce336110-5b3d-11ed-a3b6-dac502259ad0.png

可以直接通過 java -jar 運行 quarkus-app 目錄下 quarkus-run.jar 和 quarkus-web-demo-1.0.0-SNAPSHOT-native-image-source-jar 目錄下的 quarkus-web-demo-1.0.0-SNAPSHOT-runner.jar。不到 1 秒的時間就啟動完畢了。

訪問上面測試地址同樣可以看到正確的結果:

ce4ce5b8-5b3d-11ed-a3b6-dac502259ad0.png

2.6 打包成依賴 GraalVM 二進制文件

此方法打包的二進制文件仍需要依賴 GraalVM,但由于代碼已經做了靜態編譯處理,所以執行效率有大幅提升,比較適合容器化啟動。

先安裝 VS C++依賴,下載 Visual Studio Installer,需要取消中文并選擇英文。然后使用 powershell 進入到項目根目錄,執行 mvn package -Pnative 命令后報錯:

ce61adae-5b3d-11ed-a3b6-dac502259ad0.png

根據提示安裝 native-image 執行安裝命令和確認是否配置了 GRAALVM_HOME、JAVA_HOME 環境變量

guinstallnative-image
#重新執行打包
mvnpackage-Pnative
ce71349a-5b3d-11ed-a3b6-dac502259ad0.png

直接運行生成的可執行文件 quarkus-web-demo-1.0.0-SNAPSHOT-runner,確實飛快,啟動時間只要 0.033s,訪問hello也正常顯示。

ce7fbc68-5b3d-11ed-a3b6-dac502259ad0.png

2.7 打包成不依賴 GraalVM 的二進制文件

需要本機先裝有 docker 的環境,這里用的是 docker desktop。打包有多種方法,可以直接 maven 參數構建,也可以在 appllications.properties 文件中增加構建參數。

quarkus.native.container-build=true
quarkus.native.native-image-xmx=4096m
ce9cb8ea-5b3d-11ed-a3b6-dac502259ad0.png
#終端命令中執行打包
mvncleanpackage-Dnative
ceb9a234-5b3d-11ed-a3b6-dac502259ad0.png

2.8 制作 docker 鏡像

直接通過 Dockerfile.native 制作 docker 鏡像:

dockerbuild
-fsrc/main/docker/Dockerfile.native
-tbolingcavalry/quarkus-web-demo:0.0.1.

執行 docker 命令生成成功:

ceca1902-5b3d-11ed-a3b6-dac502259ad0.png

查看鏡像已經生成:

cee6a158-5b3d-11ed-a3b6-dac502259ad0.png

通過 docker run 命令啟動后查看容器的信息:

cefbabde-5b3d-11ed-a3b6-dac502259ad0.png

通過 curl -L http://172.17.0.2:8080/hello -w ' ' 也可以正常訪問。

cf14eca2-5b3d-11ed-a3b6-dac502259ad0.png


審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • JAVA
    +關注

    關注

    20

    文章

    2986

    瀏覽量

    107088
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    17812
  • 微服務
    +關注

    關注

    0

    文章

    145

    瀏覽量

    7683

原文標題:Java 云原生微服務框架 Quarkus 入門實踐

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    Java 到 Go:面向對象的巨人與云原生的輕騎兵

    (Goroutine/Channel) 在 云原生基礎設施領域 占據主導地位,它也是 Java 開發者探索云原生技術棧的關鍵補
    的頭像 發表于 04-25 11:13 ?184次閱讀

    微服務器架構幾種典型的基礎框架,你了解嗎?

    SpringCloud、Dubbo、Dropwizard、Akka等是常見微服務框架。SpringCloud基于SpringBoot,生態豐富;Dropwizard輕量且繼承SpringBoot優點
    的頭像 發表于 03-04 11:05 ?353次閱讀

    云原生AI服務怎么樣

    云原生AI服務,是指采用云原生的原則和技術來構建、部署和管理人工智能應用及工作負載的方法和模式。那么,云原生AI服務怎么樣呢?下面,AI部落
    的頭像 發表于 01-23 10:47 ?411次閱讀

    云原生LLMOps平臺作用

    云原生LLMOps平臺是一種基于云計算基礎設施和開發工具,專門用于構建、部署和管理大型語言模型(LLM)全生命周期的平臺。以下,是對云原生LLMOps平臺作用的梳理,由AI部落小編整理。
    的頭像 發表于 01-06 10:21 ?415次閱讀

    Java微服務中如何確保安全性?

    Java微服務架構中確保安全性,可以采取以下措施: 身份驗證與授權: 使用OAuth 2.0和OpenID Connect框架進行身份驗證和授權。OAuth2允許用戶在不分享憑證的情況下授權第三方
    的頭像 發表于 01-02 15:21 ?576次閱讀

    如何選擇云原生機器學習平臺

    當今,云原生機器學習平臺因其彈性擴展、高效部署、低成本運營等優勢,逐漸成為企業構建和部署機器學習應用的首選。然而,市場上的云原生機器學習平臺種類繁多,功能各異,如何選擇云原生機器學習平臺呢?下面,AI部落小編帶您探討。
    的頭像 發表于 12-25 11:54 ?406次閱讀

    什么是云原生MLOps平臺

    云原生MLOps平臺,是指利用云計算的基礎設施和開發工具,來構建、部署和管理機器學習模型的全生命周期的平臺。以下,是對云原生MLOps平臺的介紹,由AI部落小編整理。
    的頭像 發表于 12-12 13:13 ?455次閱讀

    k8s微服務架構就是云原生嗎?兩者是什么關系

    k8s微服務架構就是云原生嗎?K8s微服務架構并不等同于云原生,但兩者之間存在密切的聯系。Kubernetes在云原生架構中扮演著核心組件的
    的頭像 發表于 11-25 09:39 ?475次閱讀

    開源分析和落地方案—Sentinel篇

    作者:京東物流 劉達 一、Sentinel是什么? Sentinel是從阿里技術體系內誕生并由相關社區從微服務云原生階段持續孵化的流量治理組件,在服務熔斷限流以及秒級/分鐘級監控方面提供了開箱即用
    的頭像 發表于 11-08 10:10 ?1443次閱讀
    開源分析和落地方案—Sentinel篇

    入門級攻略:如何容器化部署微服務

    第一步理解容器化基礎,第二步創建Dockerfile,第三步構建推送鏡像,第四步部署微服務,第五步管理微服務、第六步優化更新。容器化部署微服務是現代軟件開發中的一種高效方法,可提供良好的可移植性、可擴展性和管理性。容器化部署
    的頭像 發表于 10-09 10:08 ?350次閱讀

    云原生和非云原生哪個好?六大區別詳細對比

    云原生和非云原生各有優劣,具體選擇取決于應用場景。云原生利用云計算的優勢,通過微服務、容器化和自動化運維等技術,提高了應用的可擴展性、更新速度和成本效益。非
    的頭像 發表于 09-13 09:53 ?726次閱讀

    京東云原生安全產品重磅發布

    “安全產品那么多,我怎么知道防住了?”“大家都說自己是云原生的,我看都是換湯不換藥”在與客戶溝通云原生安全方案的時候,經常會遇到這樣的吐槽。越來越的客戶已經開始了云原生化的技術架構改造,也意識到
    的頭像 發表于 07-26 10:36 ?746次閱讀
    京東<b class='flag-5'>云原生</b>安全產品重磅發布

    從積木式到裝配式云原生安全

    云原生安全風險 隨著云原生架構的快速發展,核心能力逐漸穩定,安全問題日趨緊急。在云原生安全領域不但有新技術帶來的新風險,傳統IT基礎設施下的安全威脅也依然存在。要想做好云原生安全,就要
    的頭像 發表于 07-26 10:35 ?511次閱讀
    從積木式到裝配式<b class='flag-5'>云原生</b>安全

    基于DPU與SmartNic的云原生SDN解決方案

    隨著云計算,大數據和人工智能等技術的蓬勃發展,數據中心面臨著前所未有的數據洪流和計算壓力,這對SDN提出了更高的性能和效率要求。自云原生概念被提出以來,Kubernetes為云原生應用的落地提供了一
    的頭像 發表于 07-22 11:44 ?1112次閱讀
    基于DPU與SmartNic的<b class='flag-5'>云原生</b>SDN解決方案

    基于DPU的云原生裸金屬服務快速部署及存儲解決方案

    云原生技術迅速發展的當下,容器技術因其輕量級、可移植性和快速部署的特性而成為應用部署的主流選擇,但裸金屬服務器依然有其獨特的價值和應用場景,是云原生架構中不可或缺的一部分。 裸金屬服務
    的頭像 發表于 06-27 10:41 ?2921次閱讀
    基于DPU的<b class='flag-5'>云原生</b>裸金屬<b class='flag-5'>服務</b>快速部署及存儲解決方案
    主站蜘蛛池模板: 男人你懂的在线观看视频 | 日本在线视频一区二区三区 | 亚洲欧美经典 | www.黄黄黄 | 亚洲综合日韩欧美一区二区三 | 同性男男肉交短文 | 四虎国产永久免费久久 | 2021国内精品久久久久影院 | 美女张开腿露出尿口让男人桶 | 中文字幕一区视频 | 国产精品毛片一区二区三区 | 嫩草影院www| 国产重口老太和小伙乱视频 | 天天综合色天天综合色sb | 神马午夜98 | wwwxxx亚洲| 日本特级视频 | www婷婷| 轻点灬大ji巴太大太深了 | 国产一区二区三区美女在线观看 | 久久www成人看片 | 青青青青久久精品国产h | 午夜国产精品理论片久久影院 | 午夜影视在线观看 | 三级国产在线 | 日本大片免费播放网站 | 色综合天天综合给合国产 | 亚洲三级网 | 日本xxxx69日本| 天堂资源wwww在线看 | 日韩亚洲欧洲在线rrrr片 | 骚黄视频 | 美女黄页黄频 | 欧美一级视频在线 | 色香首页| 日韩一级片免费在线观看 | 国产美女视频黄a视频免费全过程 | 色综合久久天天综合绕观看 | 天天干天天摸 | 日本国产中文字幕 | 国产精品大片天天看片 |