chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內不再提示

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

jf_ro2CN3Fa ? 來源:芋道源碼 ? 作者:芋道源碼 ? 2022-11-03 14:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群


1. 概述

1.1 定義

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

  • Quarkus 官網(wǎng):https://quarkus.io/
  • Quarkus GitHub:https://github.com/quarkusio/quarkus

1.2 GraalVM 簡介

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

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

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

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

1.3 為何使用

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

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

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

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

Quarkus具備企業(yè)級應用開發(fā)能力。

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

1.4 特性

容器優(yōu)先

構建期即生成云原生鏡像執(zhí)行文件。

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

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

Kubernete 原生

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

命令式和響應式

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

社區(qū)和標準

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

開發(fā)者友好

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

1.5 官方性能數(shù)據(jù)

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

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

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

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

2. 實戰(zhàn)

入門示例項目步驟:

  • 安裝 GraalVM
  • 創(chuàng)建 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實現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權限、多租戶、數(shù)據(jù)權限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程:

#windows
PATH環(huán)境變量增加路徑:D:ProgramFilesJavagraalvm-ce-java11-22.2.0in
JAVA_HOME配置環(huán)境變量: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 創(chuàng)建 Quarkus 工程

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

IDEA 支持創(chuàng)建 Quarkus 項目

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

maven 命令支持創(chuàng)建(使用的是 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/ 頁面在線創(chuàng)建,這種方法直觀且簡單(不用記命令),推薦使用。添加自己的 maven 配置,然后下載網(wǎng)站生成的工程包。

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

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

目錄結構如下:

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

2.3 IDEA 導入項目

IDEA 導入上面的 Maven項目,幾分鐘下載依賴后項目已成功導入。可以看到 Quarkus 項目的 pom 文件核心依賴為 quarkus-bom。Quarkus 官方認為傳統(tǒng)的接口就是一個個對外方法的資源,所以在 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,但由于代碼已經(jīng)做了靜態(tài)編譯處理,所以執(zhí)行效率有大幅提升,比較適合容器化啟動。

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

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

根據(jù)提示安裝 native-image 執(zhí)行安裝命令和確認是否配置了 GRAALVM_HOME、JAVA_HOME 環(huán)境變量

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

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

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

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

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

quarkus.native.container-build=true
quarkus.native.native-image-xmx=4096m
ce9cb8ea-5b3d-11ed-a3b6-dac502259ad0.png
#終端命令中執(zhí)行打包
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.

執(zhí)行 docker 命令生成成功:

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

查看鏡像已經(jīng)生成:

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


審核編輯 :李倩

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

    關注

    20

    文章

    2997

    瀏覽量

    115683
  • 框架
    +關注

    關注

    0

    文章

    404

    瀏覽量

    18317
  • 微服務
    +關注

    關注

    0

    文章

    147

    瀏覽量

    8050

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【技術分享】Systemd原生服務配置最佳實踐(下)

    上期我們說到sysv的規(guī)范,創(chuàng)建以及示例,那么我們今天就來講講Systemd的原生服務配置。為何要遷移到Systemd原生服務?盡管規(guī)范化的SysV腳本可臨時解決問題,但可能存在以下缺
    的頭像 發(fā)表于 10-29 11:40 ?263次閱讀
    【技術分享】Systemd<b class='flag-5'>原生</b><b class='flag-5'>服務</b>配置最佳<b class='flag-5'>實踐</b>(下)

    安卓原生兼容服務

    安卓原生兼容服務器的定義 安卓原生兼容服務器?指基于Android系統(tǒng)內核和服務框架構建的
    的頭像 發(fā)表于 06-19 17:32 ?443次閱讀

    云原生環(huán)境里Nginx的故障排查思路

    本文聚焦于云原生環(huán)境下Nginx的故障排查思路。隨著云原生技術的廣泛應用,Nginx作為常用的高性能Web服務器和反向代理服務器,在容器化和編排的環(huán)境中面臨著新的故障場景和挑戰(zhàn)。
    的頭像 發(fā)表于 06-17 13:53 ?639次閱讀
    <b class='flag-5'>云原生</b>環(huán)境里Nginx的故障排查思路

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

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

    Snap Store開發(fā)者工具圖譜:從全棧到云原生,一張圖解鎖Linux開發(fā)新姿勢!

    PyCharm+Postman構建微服務,還是云原生新人嘗試Kubectl+Helm馴服K8s,SnapStore早已備好全套裝備。本文作為《UbuntuSnap》系列的第三彈
    的頭像 發(fā)表于 03-25 09:22 ?631次閱讀
    Snap Store開發(fā)者工具圖譜:從全棧到<b class='flag-5'>云原生</b>,一張圖解鎖Linux開發(fā)新姿勢!

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

    SpringCloud、Dubbo、Dropwizard、Akka等是常見微服務框架。SpringCloud基于SpringBoot,生態(tài)豐富;Dropwizard輕量且繼承SpringBoot優(yōu)點
    的頭像 發(fā)表于 03-04 11:05 ?794次閱讀

    云原生在汽車行業(yè)的優(yōu)勢

    近年來,“云原生”已成為科技領域的高頻熱詞。從企業(yè)數(shù)字化轉型到智能化產(chǎn)業(yè)布局,各行各業(yè)對云原生技術的需求呈現(xiàn)爆發(fā)式增長,向云計算轉型已成為一大趨勢。根據(jù)Gartner的預測,到2025年,超過95%的新數(shù)字工作負載將遷移至云端,而非傳統(tǒng)數(shù)據(jù)中心。
    的頭像 發(fā)表于 02-21 09:20 ?1474次閱讀

    云原生AI服務怎么樣

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

    云原生LLMOps平臺作用

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

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

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

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

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

    寶藏級微服務架構工具合集

    寶藏級熱門微服務架構工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot簡化了微服務
    的頭像 發(fā)表于 12-21 16:33 ?902次閱讀

    SSM框架Java開發(fā)中的應用 如何使用SSM進行web開發(fā)

    SSM框架,即Spring、SpringMVC和MyBatis的整合,是Java Web開發(fā)中常用的技術棧。它通過分層架構,實現(xiàn)了視圖、控制、業(yè)務邏輯和數(shù)據(jù)訪問的分離,提高了代碼的可維護性和可擴展性
    的頭像 發(fā)表于 12-16 17:28 ?2132次閱讀

    構建云原生機器學習平臺流程

    構建云原生機器學習平臺是一個復雜而系統(tǒng)的過程,涉及數(shù)據(jù)收集、處理、特征提取、模型訓練、評估、部署和監(jiān)控等多個環(huán)節(jié)。
    的頭像 發(fā)表于 12-14 10:34 ?676次閱讀

    什么是云原生MLOps平臺

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