Kubernetes での Java サーバーレス関数の最適化

Kubernetes での Java サーバーレス関数の最適化

Kubernetes 上でサーバーレス関数を実行する際に、起動が高速化され、メモリ フットプリントが小さくなります。

Kubernetes では、何千ものアプリケーション ポッドを実行するコストと、使用するワーカー ノードやその他のリソースが少ないことによるコスト削減のため、起動の高速化とメモリ フットプリントの縮小が常に重要です。 Kubernetes 上のコンテナ化されたマイクロサービスでは、次の理由により、メモリがスループットよりも重要です。

  • 永続性があるため、コストが高くなります (CPU サイクルとは異なります)。
  • マイクロサービスによりオーバーヘッドコストが飛躍的に増加します。
  • モノリシック アプリケーションは N 個のマイクロサービスになります (例: 20 個のマイクロサービス ≈ 20 GB)

これは、サーバーレス関数の開発と Java デプロイメント モデルに大きな影響を与えます。これは、多くのエンタープライズ開発者が、パフォーマンスのボトルネックを克服するために Go、Python、Nodejs などの代替手段を選択してきたためです。しかし、今では、新しい Kubernetes ネイティブ Java スタックである Quarkus のおかげで、その問題が解決されています。この記事では、Quarkus を使用して Kubernetes 上でサーバーレス関数を実行するための Java パフォーマンスを最適化する方法について説明します。

コンテナファースト設計

Java エコシステムの従来のフレームワークでは、構成処理、クラスパスのスキャン、クラスの読み込み、注釈処理、フレームワークに必要な世界のメタモデルの構築など、フレームワークの初期化に必要なメモリと起動時間という点でコストがかかります。これは、さまざまなフレームワークごとに何度も繰り返されます。

Quarkus は、オーバーヘッドのほぼすべてをビルド フェーズに「シフト レフト」することで、これらの Java パフォーマンスの問題を解決するのに役立ちます。コードとフレームワークの分析、バイトコード変換、および動的メタモデルの生成をビルド時に 1 回だけ実行することで、ビルド フェーズ中に作業が 1 回完了するため、従来の起動時に必要なメモリをすべて必要とせず、非常に高速に起動する、高度に最適化されたランタイム実行可能ファイルが作成されます。

さらに重要なのは、Quarkus を使用すると、起動時間が非常に速く、Resident Set Size (RSS) メモリが非常に小さいなど、パフォーマンス上の利点を備えたネイティブ実行可能ファイルを構築できるため、従来のクラウドネイティブ Java スタックと比較して、即時のスケーリングと高密度のメモリ利用が可能になることです。

Quarkus を使用して Java サーバーレス関数プロジェクトからネイティブ実行可能ファイルを構築する方法の簡単な例を示します。

1. QuarkusサーバーレスMavenプロジェクトを作成する

このコマンドは、単純な関数を作成するための Quarkus プロジェクト (たとえば、quarkus-serverless-native) を生成します。

2. ネイティブ実行ファイルを作成する

Java アプリケーションのネイティブ実行可能ファイルを構築するには、GraalVM が必要です。 Oracle GraalVM Community Edition (CE) や Mandrel (Oracle GraalVM CE のダウンストリーム ディストリビューション) など、任意の GraalVM ディストリビューションを選択できます。 Mandrel は、OpenJDK 11 上での Quarkus ネイティブ実行可能ファイルのビルドをサポートするように設計されています。

pom.xml を開くと、このネイティブ構成ファイルが見つかります。これを使用してネイティブ実行可能ファイルを構築します。


注: GraalVM または Mandrel ディストリビューションをローカルにインストールできます。また、Mandrel コンテナ イメージをダウンロードしてビルドすることもできます (私が行ったように)。そのため、ローカルで実行されるコンテナ エンジン (Docker など) が必要になります。

コンテナ ランタイムがすでに開始されていると仮定して、次の Maven コマンドのいずれかを実行します。

Dockerの場合:

Podmanの場合:

出力は BUILD SUCCESS で終わるはずです。

Java 仮想マシン (JVM) を使用せずにネイティブ実行可能ファイルを直接実行するには:

出力は次のようになります。

超音速!起動時間は19ミリ秒です。時間は環境によって異なる場合があります。

また、Linux ps ユーティリティで報告されるように、メモリ使用量も非常に低いです。アプリケーションの実行中に、別のターミナルでこのコマンドを実行します。

次のようなものが表示されます。

このプロセスでは約 11MB のメモリ (RSS) が使用されます。かなりコンパクトですね!

注意: あらゆるアプリケーション (Quarkus を含む) の RSS とメモリ使用量は、特定の環境によって異なり、アプリケーション エクスペリエンスの負荷が増すにつれて増加します。

REST API を使用して関数にアクセスすることもできます。出力は Hello RESTEasy のようになります。

3. Knativeサービスに関数をデプロイする

まだ作成していない場合は、OKD (OpenShift Kubernetes Distribution) に名前空間 (例: quarkus-serverless-native) を作成して、このネイティブ実行可能ファイルをサーバーレス関数としてデプロイします。次に、Knative サービス デプロイメントに quarkus-openshift 拡張機能を追加します。

Knative および Kubernetes リソースを構成するには、src/main/resources/application.properties に次の変数を追加します。

ネイティブ実行可能ファイルを構築し、OLD クラスターに直接デプロイします。

注: 事前に oc login コマンドを使用して、正しいプロジェクト (例: quarkus-serverless-native) にログインしていることを確認してください。

出力は BUILD SUCCESS で終わるはずです。ネイティブバイナリビルドを完了して新しい Knative サービスをデプロイするには数分かかります。サービスが正常に作成されたら、kubectl または oc コマンド ツールを使用して、Knative サービス (KSVC) とリビジョン (REV) が表示されます。

4. ネイティブ実行可能関数へのアクセス

次の kubectl コマンドを実行して、サーバーレス関数のエンドポイントを取得します。

出力は次のようになります。

ルート URL にアクセスするには、curl コマンドを使用します。

1 秒もかからずに、ローカルと同じ結果が得られます。

OLD クラスターで Quarkus 実行ポッドのログにアクセスすると、ネイティブ実行ファイルが Knative サービスとして実行されていることがわかります。

次は何ですか?

GraalVM ディストリビューションを使用して、Java サーバーレス関数を最適化し、Knative および Kubernetes 上にサーバーレス関数としてデプロイできます。 Quarkus は、通常のマイクロサービスでシンプルな構成を使用してこのパフォーマンスの最適化を実現します。

<<:  市場はさらに細分化され、中国のビデオクラウド市場規模は2022年後半に49.8億米ドルに達する見込み

>>:  クラウド管理型ネットワークは将来をどのように定義するのでしょうか?

推薦する

エッジコンピューティングで何ができるでしょうか?

あらゆる分野でモノのインターネットが急速に発展し、インターネットビッグデータの時代が近づいています。...

ロボットファイルを使用してページのクロール率を向上させる方法

1. ロボットファイルを理解するrobots.txt ファイルは、サーバー上のどのファイルを表示でき...

分散アプリケーションを簡単に作成

[[420515]]計算負荷の高いタスクに直面した場合、マルチプロセスに加えて分散コンピューティング...

#米国労働者の日# spinservers: 専用サーバーが 33% オフ、月額 199 ドル、2*e5-2690v4/768G メモリ/3.84TNVMe/30T トラフィック (20G 帯域幅)

spinservers は、米国労働者の日に向けて特別プロモーションを開始しました。米国ダラスのデー...

Terranode: ロサンゼルス VPS、月額 3.49 ドル、1G メモリ/2 コア (Ryzen9 7950X)/20g NVMe/1T トラフィック/10G 帯域幅/無料バックアップ

テラノードは2009年に設立されたとされる企業で、主にVPS事業を展開しており、データセンターは米国...

justhostはどうですか?香港 VPS シンプルレビュー

justhostはどうですか? justhost Hong Kongはいかがでしょうか? justh...

ウェディングフォトグラフィーがユーザーのニーズをどのように捉えられるかについての実践的な分析

以前、ウェディング写真撮影がユーザー エクスペリエンスを向上させる方法についての記事「ケース分析: ...

クラウドネイティブ変革: スケーラブルな進化と文化的思考

[[416383]]いわゆる変革とは、構造形態、運営モデル、人々の物事に対する概念の根本的な変化のプ...

lazys3 ブルートフォース列挙バケット

この記事の目的は、いくつかのバケットの名前または会社名を知り、プログラムを使用してこの会社の下にある...

「SEO のいくつかの重大な犯罪」を反論する SEO を本当に理解する方法

最近、ある業界のウェブサイトで「SEO のいくつかの重大な犯罪」というタイトルの記事を見ましたが、そ...

ZhongAn Tianxia が新世代の SaaS セキュリティ サービス プラットフォームを開始

さまざまな業界でデジタル化、インテリジェント化が進むにつれ、クラウドコンピューティング、ビッグデータ...

海雲傑迅は人工知能教育分野で総合的なサービスを提供するAI Goを立ち上げようとしている

[51CTO.com オリジナル記事] 今、業界で人気のテクノロジーは何ですか?それは間違いなく人工...

khanwebHost: $19.99/年、KVM/1G メモリ/1 コア/30g SSD/2T または 5T、フェニックス/ドイツ/フランス

khanwebHost はパキスタンに登録された会社 (登録番号 0127931) で、2001 年...

XPRIZE創設者ピーター・ディアマンディスがデジタル変革のリーディングカンファレンスLiveWorxで基調講演

PTC (NASDAQ: PTC) は、ピーター・ディアマンディス医学博士が、6 月 11 日火曜日...

ランキング向上のための内部リンク最適化の比較分析

ウェブサイトの内部リンクの最適化は重要なタスクです。内部リンクはバックリンクの一種であり、ランキング...