Kubernetes 上でサーバーレス関数を実行する際に、起動が高速化され、メモリ フットプリントが小さくなります。 Kubernetes では、何千ものアプリケーション ポッドを実行するコストと、使用するワーカー ノードやその他のリソースが少ないことによるコスト削減のため、起動の高速化とメモリ フットプリントの縮小が常に重要です。 Kubernetes 上のコンテナ化されたマイクロサービスでは、次の理由により、メモリがスループットよりも重要です。
これは、サーバーレス関数の開発と 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億米ドルに達する見込み
>>: クラウド管理型ネットワークは将来をどのように定義するのでしょうか?
ウェブマスターの友人の大多数にとって、ウェブサイトコンテンツのインクルードを向上させるテクニックは基...
テンセントは9月18日、独自に開発した軽量IoTリアルタイムオペレーティングシステム「Tencent...
過去1年間でクラウドコンピューティングの開発は徐々に成熟し、クラウド導入の事例も数多く登場しました。...
ウェブサイトを構築しているときに、ランキングが 40 位から 80 位に上がったのに、突然ランキング...
現在、中国のデザイナーは世界各国の成功例や失敗例から学ぶ絶好の機会を得ている。しかし同時に、急速に発...
はじめに:初期のクラウド コンピューティングのターゲット顧客は、主に中小企業と革新的な企業でした。ク...
profitserver のシンガポール VPS をご紹介します。KVM 仮想化、純粋な SSD、1...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスWebホスティングとは何...
ウェブサイトがKアウトされる事件が相次いでいます。6月から現在まで、ウェブサイトがKアウトされること...
現在、「3B戦争」が本格化しています。Qihoo 360社が率先してこの戦争を引き起こし、その目的は...
solidseovps は 2006 年に設立されたアメリカの老舗企業で、現在 VPS と専用サーバ...
cloudconeの公式ブラックフライデープロモーションが始まりました。multacomコンピュータ...
コンタボはどうですか? contabo UKはどうですか?コンタボの英国データセンターのクラウドサー...
ブランド**は、恐怖、仲間からの圧力、性的暗示など、多くの一般的な「**」の方法について言及しました...
Hostgator は創立 16 周年 (HOSTGATOR'S 16TH BIRTHDAY...