Java xvs arm を使用した AWS Lambda のパフォーマンス - 一部の初期測定
導入
これまで、arm64 アーキテクチャの一部のユースケース (DynamoDB リクエストの実行など) では、SnapStart がサポートされていなかったため、Java 21 ランタイムを使用した Lambda 関数のパフォーマンス (ウォーム スタート時間とコールド スタート時間) を測定していませんでした。 SnapStart が有効になっている x86_64 アーキテクチャの Java 21 ランタイムを備えた Lambda は、arm64 アーキテクチャを備えた Lambda よりも優れたパフォーマンスを発揮します (追加のプライミング最適化によりさらに優れています)。しかし、2024 年 7 月 18 日、AWS は、AWS Lambda が ARM64 アーキテクチャを使用する SnapStart for Java 関数をサポートするようになったと発表しました。したがって、Lambda 関数のアーキテクチャの選択も考慮して、コールド スタート時間とウォーム スタート時間の測定を開始することは理にかなっています。現在の AWS Lambda のメモリ設定と実行期間の価格設定では、arm64 アーキテクチャの Lambda は約 100 時間かかることが知られています。 x86_64 アーキテクチャの Lambda より 25% 安価です。
私は、このトピックについては別の記事シリーズを作成し、増え続ける AWS Lambda SnapStart シリーズに追加しないことにしました。
アプリケーション例のコールド スタートとウォーム スタートの測定
私たちの実験では、記事「AWS Lambda SnapStart - Java 21 Lambda コールド スタートの測定」で紹介されたアプリケーションを再利用します。サンプル アプリケーションのコードは次のとおりです。基本的に 2 つの主要な Lambda 関数があり、どちらも API Gateway リクエストに応答して、指定された ID で製品を作成し (PutProductFunction Lambda 関数を参照)、指定された ID で製品を取得します (GetProductByIdFunction Lambda 関数を参照)。 SnapStart を有効にしても無効にしても、両方の Lambda 関数を使用できます。追加の Lambda 関数 GetProductByIdWithPrimingFunction があり、SnapStart 対応 Lambda 関数の DynamoDB リクエスト プライミングの効果を個別に測定するために作成しました。プライミングの効果について詳しくは、私の記事「AWS Lambda SnapStart - プライミング、エンドツーエンドのレイテンシー、デプロイメント時間の測定」をご覧ください。
すべての Lambda 関数で SnapStart を有効にするには、SAM テンプレート内の次のコメントを解除してください:
Globals: Function: CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar ... SnapStart: ApplyOn: PublishedVersions ...
すべての Lambda 関数ではなく、個々の Lambda 関数に対してのみ SnapStart を使用したい場合は、グローバル関数レベルではなく Lambda 関数レベルでこの SnapStart 定義を適用する必要があります。
すべての Lambda 関数には、開始点として次の設定があります。
- 1024 MB メモリ設定
- DynamoDB データベースとの通信に使用されるデフォルトの HTTP Apache クライアント
- Java コンパイル オプション「-XX:+TieredCompilation -XX:TieredStopAtLevel=1」は、コールド スタート時間とウォーム スタート時間の間に非常に優れたトレードオフを提供することが証明されました
SAM テンプレートでは、次のようにグローバル Lambda 関数セクションで Lambda アーキテクチャを定義できる機能を追加しました。
Globals: Function: CodeUri: target/aws-pure-lambda-snap-start-21-1.0.0-SNAPSHOT.jar ... Architectures: #- arm64 - x86_64
Lambda 関数に使用したいアーキテクチャのコメントを解除するだけです。
Java が「一度書けば、どこでも実行できる」としても、事前にインストールしておいた Graviton プロセッサ (arm64/aarch64 アーキテクチャに基づく) を備えた t4g AWS EC2 インスタンス上で arm64 測定用のアプリケーション jar ファイルをコンパイルして構築しました。 Linux aarch64 用 Amazon Corretto 21。この瓶はここで見つけることができます。
また、同じ Corretto Java 21 の最新ランタイム バージョン (測定時点では Java 21.v17 ) を使用して、同等の結果を得るため、x86_64 アーキテクチャのすべてを再度測定しました。
以下の実験の結果は、100 回を超えるコールド スタートと約 100,000 回のウォーム スタートの再現に基づいています。そのために (および前回の記事の実験で) 負荷テスト ツールを使用しましたが、Serverless-artillery や Postman など、好きなツールを使用できます。 また、アプリケーションの新しいソース コード (再) デプロイメントの直後に測定を開始したことに注意することも重要です。コールド スタートではスナップショット階層型キャッシュの影響もあることにも注意してください。通常、最初の呼び出しは遅くなり、特定の呼び出し数に達するまで後続の呼び出しは速くなります。
次に、「既存の ID による製品の取得」のすべての測定 (SnapStart が有効でプライミング測定の場合は Lambda 関数 GetProductByIdFunction および GetProductByIdWithPrimingFunction) のケースをまとめてみましょう。
コールド (c) およびウォーム (m) の開始時間 (ミリ秒):
Approach | c p50 | c p75 | c p90 | c p99 | c p99.9 | c max | w p50 | w p75 | w p90 | w p99 | w p99.9 | w max |
---|---|---|---|---|---|---|---|---|---|---|---|---|
x86_64, no SnapStart enabled | 3554.30 | 3615.21 | 3666.15 | 3800.47 | 4108.61 | 4111.78 | 5.42 | 6.01 | 6.88 | 14.09 | 40.98 | 1654.59 |
arm64, no SnapStart enabled | 3834.81 | 3904.42 | 3983.26 | 4047.47 | 4332.13 | 4335.74 | 5.96 | 6.66 | 7.69 | 16.01 | 43.68 | 1844.54 |
x86_64, SnapStart enabled without priming | 1794.09 | 1846.86 | 2090.54 | 2204.27 | 2239.80 | 2240.08 | 5.37 | 5.96 | 6.93 | 15.88 | 51.64 | 1578.34 |
arm64, SnapStart enabled without priming | 1845.01 | 1953.18 | 2591.70 | 2762.91 | 2793.45 | 2795.8 | 5.91 | 6.56 | 7.63 | 16.75 | 63.52 | 1779.14 |
x86_64, SnapStart enabled with DynamoDB request priming | 803.18 | 870.18 | 1103.78 | 1258.19 | 1439.95 | 1440.67 | 5.55 | 6.25 | 7.45 | 15.50 | 63.52 | 448.85 |
arm64, SnapStart enabled with DynamoDB request priming | 910.14 | 1001.79 | 1376.62 | 1623.44 | 1684.60 | 1686.19 | 6.05 | 6.72 | 7.81 | 16.66 | 74.68 | 550.59 |
結論
この記事では、3 つのユースケースについて、DynamoDB データベースに接続する Lambda 関数のコールド スタート時間とウォーム スタート時間の測定値を比較しました。
- Lambda 関数で SnapStart が有効になっていない場合
- Lambda 関数で SnapStart が有効になっていますが、プライミング最適化は行われていません
- Lambda 関数で SnapStart を有効にし、DynamoDB リクエストをプライミングした状態
x86_64 アーキテクチャを使用すると、arm64 アーキテクチャと比較してすべてのコールド スタート時間とウォーム スタート時間が短縮されることがわかりました。ただし、 arm64 アーキテクチャの Lambda の価格は x86_64 アーキテクチャ より 25% 安いため、非常に興味深いコストパフォーマンスのトレードオフが生じます。
3 つのユースケースすべてに対する測定値:
- arm64 アーキテクチャでの Lambda コールド スタート時間は、x86_64 アーキテクチャと比較して、多くのパーセンタイルで 10 ~ 20% (非常にまれな場合にのみ 25 ~ 27%) 遅くなりました。
- arm64 アーキテクチャでの Lambda ウォーム スタート時間は、x86_64 アーキテクチャと比較して、多くのパーセンタイルで 5 ~ 10% 遅いだけでした。
したがって、このサンプル アプリケーションにとって arm64 アーキテクチャの選択は非常に合理的です。 arm64 アーキテクチャの SnapStart サポートは最近導入されたばかりなので、将来的にはパフォーマンスが向上することも期待されています。ユースケースに応じて独自の測定を行ってください。
記事の次の部分では、Lambda メモリを 256 MB と 2048 MB の間の異なる値に設定して同じパフォーマンス測定を実行し、結果を比較します。
以上がJava xvs arm を使用した AWS Lambda のパフォーマンス - 一部の初期測定の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。
