AWSステップ機能対AWSラムダ-パート2


表紙のテンションも感じますか?再び戦いの時です.🥊 私が比較した後、私は受け取ったフィードバックの量に圧倒されました.それは私のポスト、TwitterやLinkedInの議論に関するコメントです.
最初のポストが多くの刺激的な議論を引き起こしたという事実は非常に貴重です.あなたのフィードバックを読んでいる間、それは2番目の部分の必要性があることは明らかであった.
私はAWSラムダの最適化について多くのフィードバックを受けました、そして、人々が我々が州のマシンと比較してパフォーマンスにどのように影響を及ぼすかに興味があるということです.我々はまた、サービスが異なる方法をより完全なビューを得るためにコストの観点に詳しく見ていきます.
はい.
我々の最初の部分のように、再びすべての実験は、使われますApache Bench を返します.ab -n 15000 -c 1 https://hash.execute-api.eu-central-1.amazonaws.com/.../ -n トリガされるリクエストの合計金額を設定します-c 同時リクエストの数です.
⚠️ 重要:アパッチベンチからの結果は100 %正確ではないことを考慮することが重要です.測定されたスループットは、私のローカルワークステーションのハードウェアとネットワーク能力に依存します.今後のベンチマークのために、私はCloudShellのようなものを使うことを考えます.
しかしApacheベンチはいくつかの非常に初期のフィードバックと潜在的な徴候を与えます.したがって、これらの結果をラムダ持続時間とステップ関数実行時間と組み合わせて使用する.

🔋 ラムダ関数の最適化
では、今後の実験の目標は何ですか?私たちは
ラテン語を減らすために明確な焦点でラムダ関数にいくつかの最適化を適用します.私が得たフィードバックに基づいて、最適化の2つの主要なアプローチがありました
  • keep alive設定をアクティブにすることで、川下のHTTP接続を再利用します.
  • 割り当てられたメモリを増やすことによって、全体的な実行パフォーマンスを改善すること.

  • ノードにおけるkeep‐aliveとの接続の再利用js
    S 3への我々のケースの書き込みと読み込みのような短命な操作のために、TCP接続を設定することの潜在的オーバーヘッドは、操作自体より大きいかもしれません.HTTP keep aliveを有効にするには、単にラムダ関数の設定で環境変数を設定する必要があります.
    Environment:
      Variables:
        AWS_NODEJS_CONNECTION_REUSE_ENABLED: 1
    
    既にAWS JS SDKのv 3を使用している場合は、この設定はenabled by default . V 2の場合はexplicitly activate it .
    変更を配置し、最初のテストを開始します.まずApacheのベンチレポートの解析から始めましょう.完全な報告書はGitHub . ここでいくつかのハイライト
  • ラムダ関数は、ステートマシンと比較して43秒速くすべての要求を処理することができました.
  • 状態機械とラムダ関数は、毎秒約7リクエストを処理できた
  • ラムダ関数の要求あたりの平均時間はステートマシンの131 msと134 msであった.
  • これらの結果を見て、TCP keep aliveを活性化するこの小さな微調整は、ラムダ関数をスピードアップするために大いに助けました.エンドツーエンドのパフォーマンスとレイテンシの観点から、両方の解決策は、現在非常に近いです.
    観測を確認するために、CloudWatchとX線をより詳しく見てみましょう.

    ステートマシンの平均実行時間は46.4 msであり、λは49 msで実行される.

    ここではまだ面白そうです.状態機械の持続時間が安定している間、平均のラムダ機能持続時間はまだテストの実行の間、若干の上下を持ちます.両方の解決策は、いくつかのコールドスタートの動作を示していますが、状態機械は“暖かい”になるには少ない時間が必要です.
    しかし、ラムダ関数性能への影響は、最初の部分の結果に比べて非常に印象的です.

    ラムダ関数をいくつかのRAMに与える
    しかし、問題は:どのくらいのメモリ私のラムダ関数が必要ですか?範囲は128 MBから10.240 MBまでかなり大きい.
    素晴らしいオープンソースツールと呼ばれるLambda Power Tuner “それは速度、コストやバランスのようなさまざまな戦略に基づいて、メモリの設定を決定するのに役立ちます.

    If you use "cost" the state machine will suggest the cheapest option (disregarding its performance), while if you use "speed" the state machine will suggest the fastest option (disregarding its cost). When using "balanced" the state machine will choose a compromise between "cost" and "speed"


    ソースLambda Power Tuner @ AWS Serverless Application Repository
    私のケースでは、“ラムダパワーチューナー”は、“ベストタイム”として、“ベストコスト”と2048 MBとして256 MBを提案した.

    ものすごい、今、我々は最終的なテストのために良いスタートをします.

    ベストタイム設定
    待ち時間を減らすことを目的として、2048 MBメモリの提案された「ベストタイム」設定から始めましょう.
  • ラムダ関数は、ステートマシンと比較して81秒速くすべての要求を処理することができました.
  • 状態機械とラムダ関数は、毎秒約8リクエストを処理することができた
  • ラムダ関数の要求あたりの平均時間はステートマシンの121 msと123 msであった.
  • 私たちの最初のテストに比べて、いくつかの改善が、彼らはわずかに平均しているようだ.私たちはCloudWatchとX線を使用していくつかのより洞察を得るためにしよう.

    ほとんどの部分では、ラムダ関数の持続時間はステートマシンの実行時間のすぐ下にあります.
    ステートマシンの平均実行時間は45.1 msであり、ラムダは41.8 msである.

    我々のメモリ構成を「ベストコスト」として考えられる設定に設定するならば、何が起こるでしょうか?次の章で結果をレビューしましょう.

    ベストコスト設定
    再びアパッチベンチメトリック
  • ラムダ関数は、状態マシンに比べて155秒速くすべての要求を処理することができました.
  • ラムダ関数は毎秒8リクエストを処理している間、状態機械は毎秒7.5リクエストを処理することができた
  • ラムダ関数の要求あたりの平均時間は,状態機械の122 msと132 msであった.
  • CloudwatchとX線結果も非常に近い結果を確認します.

    状態機械の平均実行時間は54.8 msであり、λは50.5 msのリード線にある.


    💰 コスト比較
    私のテストのスケールに基づいて、私が発生した負荷があまりにも低いので、AWSコストエクスプローラーは本当に役に立ちませんでした.AWSの計算機は、両方のサービスのコストを比較するために有用なツールです.
    見積もりはpublicly available あなたが詳細な観察をしたいならば.
    私は、サービスにつき月につき500万の呼び出しを計算しました.我々のテスト結果に基づいて、ラムダ起動期間/状態機械実行またはメモリを消費するような価格に影響するパラメータのための非常に正確な値を決定することができました.毎月のコストは以下の通りです.
  • AWGラムダ用2048 MBメモリ(ベストタイム)
  • 266 MBメモリ(最高のコスト)でAWSラムダ用の1.83 USD
  • AWSステップ機能表現ワークフローのための5.52 USD

  • 💡 結論
    この部分では、ラムダ関数の性能を改善するためのオプションのようないくつかの重要な側面をカバーしました.このベンチマークを「いつでも使うことができるステップ機能」と解釈してはならないことは、言及することが非常に重要だと思います.
    私の目標は、仮説や噂に基づいた決定をしないことの重要性について議論を深めることでした.意思決定のすべての種類のベストを作るためにデータに基づいて意思決定を行うことができます.
    私は、再び以下から引用を指摘したいです:

    Use Lambda to transform not to transport


    または、私の言葉で:最高のコードは、決して書かれないコードです.
    ☝️ そして、ここに来て、これは心に留めておくのが非常に重要です
    両方のサービスは素晴らしいです.
    ラムダ関数を書く必要がある場合は、多くの問題を解決することができます.しかし、あなたが達成したいことに応じて、ステップ関数は、TCPのようなものについてのあなたの心を構成しながら、コードの任意の行を書くことなく、同じ結果を得るために多くの力を与える生きているか、どのように最高のメモリ設定は何かを把握する.すべてのテストでは、AWSラムダは、あなたが念頭に置いておくべき何かであるよく知られたコールドスタート行動を示しました.AWSステップ機能も若干のウォームアップ時間を必要とします、しかし、それは本当にAWSラム・コールドスタートに匹敵しません.さえずりのこのあたりで興味深い議論があった.

    サンディエゴ
    @ diegosantiviago

    ランタイム/プラットフォームコールドスタートではありませんが、ステップ関数はステートマシン定義を必要とします.
    午後14時39分- 2021年10月28日
    それは言うだけです:ハッピーコーディングと幸せなオーケストラ!🥳 私は、私の分析と意思決定へのアプローチがあなたの個々のユースケースのためにこれらのサービスの1つに対して、または反対することにあなたを助けることを本当に望みます.
    作者について
    👋 私の名前はクリスチャンです.私はAWSソリューションアーキテクトDFL Digital Sports GmbH . 私の最愛の妻と2人の子供とケルンに拠点を置く.私はすべての物事に興味がある☁️ (雲)👨‍💻 (技術)🧠 ( AI/ML ).
    10年以上の経験があり、私はたくさんのことを話し、経験を共有するのが大好きです.私は、メディアやエンターテインメントビジネスのいくつかの企業のソフトウェア開発者として、コンサルティング会社のソリューションエンジニアとして働いていました.
    私は、何百万ものユーザーのために高いスケーラブルなシステムを提供するそれらの挑戦が好きです.そして、私はホワイトボードの前でシステムを設計するために多くの人々と協力するのが好きです.
    あなたは私を見つけることができます
    カバーイメージmiguelangelvenegasgordillo on Tenor