自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在 Kubernetes 中優(yōu)化 Java 的 Serverless 功能

開發(fā) 前端 云原生
本文介紹了如何優(yōu)化 Java 性能以使用 Quarkus 在 Kubernetes 上運行 Serverless 功能。

實現(xiàn)更快的啟動和更小的內(nèi)存占用,以在 Kubernetes 上運行 serverless 功能。

由于運行數(shù)千個應用程序 pod 的費用以及使用更少的工作節(jié)點和其他資源來節(jié)省成本,在 Kubernetes 中更快的啟動和更小的內(nèi)存占用總是很重要的。 在 Kubernetes 上的容器化微服務上,內(nèi)存比吞吐量更重要,因為:

  •  由于永久性(與 CPU 周期不同),它更昂貴。
  •  微服務成倍增加開銷成本。
  •  一個單體應用變成 N 個微服務(例如,20 個微服務 ≈ 20GB)

這會顯著影響 serverless 功能開發(fā)和 Java 部署模型。 這是因為許多企業(yè)開發(fā)人員選擇了 Go、Python 和 Nodejs 等替代方案來克服性能瓶頸——直到現(xiàn)在,感謝 Quarkus,一個新的 Kubernetes 原生 Java 堆棧。 本文介紹了如何優(yōu)化 Java 性能以使用 Quarkus 在 Kubernetes 上運行 serverless 功能。

容器優(yōu)先設計

Java 生態(tài)系統(tǒng)中的傳統(tǒng)框架在初始化這些框架所需的內(nèi)存和啟動時間方面是有代價的,包括配置處理、類路徑掃描、類加載、注釋處理和構建世界的元模型,框架需要這些操作。對于不同的框架,這一次又一次地成倍增加。

Quarkus 通過將幾乎所有開銷“左移”到構建階段來幫助解決這些 Java 性能問題。通過在構建時只進行一次代碼和框架分析、字節(jié)碼轉(zhuǎn)換和動態(tài)元模型生成,您最終會得到一個高度優(yōu)化的運行時可執(zhí)行文件,它啟動速度超快,并且不需要傳統(tǒng)啟動的所有內(nèi)存,因為工作在構建階段完成一次。

圖片

更重要的是,Quarkus 允許您構建具有性能優(yōu)勢的本機可執(zhí)行文件,包括驚人的快速啟動時間和非常小的駐留集大小 (RSS) 內(nèi)存,與傳統(tǒng)云相比,可實現(xiàn)即時擴展和高密度內(nèi)存利用率—— 本機 Java 堆棧。

圖片

這是一個快速示例,說明如何使用 Quarkus 通過 Java serverless 功能項目構建本機可執(zhí)行文件。

一、創(chuàng)建 Quarkus serverless Maven 項目

這個命令會生成一個 Quarkus 項目(例如 quarkus-serverless-native)來創(chuàng)建一個簡單的函數(shù):

圖片

二、構建原生可執(zhí)行文件

您需要一個 GraalVM 來為 Java 應用程序構建本機可執(zhí)行文件。 您可以選擇任何 GraalVM 發(fā)行版,例如 Oracle GraalVM 社區(qū)版 (CE) 和 Mandrel(Oracle GraalVM CE 的下游發(fā)行版)。 Mandrel 旨在支持在 OpenJDK 11 上構建 Quarkus 原生可執(zhí)行文件。

打開 pom.xml,你會發(fā)現(xiàn)這個原生配置文件。 您將使用它來構建本機可執(zhí)行文件:

圖片


注意:您可以在本地安裝 GraalVM 或 Mandrel 發(fā)行版。 您還可以下載 Mandrel 容器鏡像來構建它(就像我所做的那樣),因此您需要在本地運行容器引擎(例如 Docker)。

假設您已經(jīng)啟動了容器運行時,請運行以下 Maven 命令之一。

對于 Docker:

圖片

對于 Podman:

圖片

輸出應以 BUILD SUCCESS 結(jié)束。

圖片

在沒有 Java 虛擬機 (JVM) 的情況下直接運行本機可執(zhí)行文件:

圖片

輸出將如下所示:

圖片

超音速! 啟動時間為 19 毫秒。 時間可能因您的環(huán)境而異。

正如 Linux ps 實用程序報告的那樣,它還具有極低的內(nèi)存使用率。 在應用程序運行時,在另一個終端中運行此命令:

圖片

你應該看到類似的東西:

圖片

此過程使用大約 11MB 的內(nèi)存 (RSS)。 相當緊湊!

注意:任何應用程序(包括 Quarkus)的 RSS 和內(nèi)存使用量將根據(jù)您的特定環(huán)境而有所不同,并且會隨著應用程序體驗的加載而增加。

您還可以使用 REST API 訪問該函數(shù)。 那么輸出應該是 Hello RESTEasy:

圖片

三、將功能部署到 Knative 服務

如果您還沒有,請在 OKD(OpenShift Kubernetes Distribution)上創(chuàng)建一個命名空間(例如 quarkus-serverless-native),以將此本機可執(zhí)行文件部署為無服務器功能。 然后為 Knative 服務部署添加一個 quarkus-openshift 擴展:

圖片

在 src/main/resources/application.properties 中添加以下變量來配置 Knative 和 Kubernetes 資源:

圖片

構建本機可執(zhí)行文件,然后直接將其部署到 OLD 集群:

圖片

注意:確保提前使用 oc login 命令登錄到正確的項目(例如 quarkus-serverless-native)。

輸出應以 BUILD SUCCESS 結(jié)束。 完成原生二進制構建并部署新的 Knative 服務需要幾分鐘時間。 成功創(chuàng)建服務后,您應該使用 kubectl 或 oc 命令工具看到 Knative 服務 (KSVC) 和修訂版 (REV):

圖片

四、訪問原生可執(zhí)行函數(shù)

通過運行以下 kubectl 命令檢索 serverless 函數(shù)的端點:

圖片

輸出應如下所示:

圖片

使用 curl 命令訪問路由 URL:

圖片

不到一秒鐘,您將獲得與本地相同的結(jié)果:

圖片

當您訪問 OLD 集群中的 Quarkus 運行 pods 日志時,您將看到本機可執(zhí)行文件作為 Knative 服務運行。

圖片

下一步是什么?

您可以使用 GraalVM 發(fā)行版優(yōu)化 Java serverless功能,將它們作為無服務器功能部署在 Knative 和 Kubernetes 上。 Quarkus 使用普通微服務中的簡單配置來實現(xiàn)這種性能優(yōu)化。

責任編輯:姜華 來源: 新鈦云服
相關推薦

2021-11-05 16:08:57

作業(yè)幫Kubernetesserverless

2018-07-30 11:53:04

Kubernetes無服務器容器

2024-03-18 00:00:04

AIKubernetes機器學習

2022-10-26 15:43:51

KubernetesJava無服務

2020-05-26 22:23:03

Serverless容器Serverless

2021-10-13 09:45:54

Serverless 應用調(diào)試

2022-09-06 10:29:27

無服務器Serverless

2024-12-17 07:41:34

Java逃逸分析

2023-07-24 16:09:58

Kubernetes云計算

2021-11-10 08:20:20

GitLab KubernetesDocker

2020-05-26 22:19:46

KubernetesServerless存儲

2020-11-26 08:46:52

Spinnaker

2021-10-26 10:28:41

開發(fā)架構Kubernetes

2009-07-09 16:12:53

WeblogicJDBC

2021-04-29 08:11:11

SQL優(yōu)化作用

2021-11-26 10:08:57

鴻蒙HarmonyOS應用

2021-12-21 15:17:53

Kubernetes緩存Linux

2022-08-26 15:54:34

云原生Kubernetes物聯(lián)網(wǎng)

2024-04-10 11:50:28

2021-07-06 07:46:16

KubernetesRook存儲
點贊
收藏

51CTO技術棧公眾號