御成門プログラマーの技術日記

Microsoft AzureやAngularなどの技術情報を発信します。

Azure Functions Flex Consumption と従来の Azure Functions 従量課金の性能差を比べてみた。

Build 2024でPublic Preview となった Azure Functions Flex Consumption(Azure Functions Flex 従量課金)ですが、従来の Azure Functions Consumption Plan (Azure Functions 従量課金プラン)との比較をしてみようと思います。

Azure Flex Consumption とは

パブリックプレビューと同時にドキュメントも公開されていますね。
説明は引用します。

Flex 従量課金は Linux ベースの Azure Functions ホスティング プランで、従量課金の "使用した分だけ支払う" サーバーレス課金モデルに基づいています。 プライベート ネットワーク、インスタンス メモリ サイズの選択、"サーバーレス" モデルに基づく高速または大規模スケールアウト機能を導入することで、柔軟性とカスタマイズ性が向上します。

Azure Functions の Flex 従量課金プラン ホスティング | Microsoft Learnより引用。

公式ドキュメントにも書かれていますが、Flex Consumption は下記の点がメリットとされています。

  • インスタンスのスケールアウトが高速
  • 従量課金プレンで仮想ネットワーク統合によるプライベート接続が可能
  • 常時使用可能インスタンスを設定可能

今までAzure Functionsをプライベート接続で使いたい環境では従量課金プランが使えず、0インスタンススケールが不可の「Functions Premium」か「Azure Functions on App Service Plan」 を使う必要があったため、使いたいたいときだけ使い、使った分だけ課金の真の従量課金と言えなかったのですが今回のAzure Flex Consumptionによりそれが可能となりました。

今回はそんなAzure Functions Flex Consumptionが今までのAzure Functions Consumptions と比較して性能がどれだけ違うのか?負荷テストを実施するAzureサービス「Azure Load Testing」を利用して比較してみようと思います。

Flex Consumption vs Consumption

リソース作成

というわけでリソース作成。
Azure Portal の Function App の作成画面です。 選択肢が増えてますね。

ここで「Flex Consumption」と「Consumption」をそれぞれ作成します。ここで後で引っ掛かった点として作成したFlex Consumption のリソースに Visual Studio から直接発行しようとするとなぜか失敗する現象が発生、VS Code から作成しなおしたらはうまく発行できました。
Flex Consumption を作成するときにインスタンスのサイズが選択できるので今回は小さい方の2048MBで作成しました。

Functions に Azure Load Testing を仕込む

というわけでリソースができたら Azure Load Testing を作成していきます。Azure Load Testing については以前、軽く紹介しているのでそちらをご参照ください。
onarimon.jp

あらかじめAzure Load Testing のリソースは作った状態で今回は Azure Functions のブレードにあるメニューから作ってみました。App Service や Azure Funtions のメニューにいつの間にかあった「Performance → Azure Load Testing」のボタンからテストの作成が可能。

そこから作ると自動でFunctions内の関数の情報や使用するキーなども初期状態に入っているので楽ちん。

今回条件はどちらのFunctionsとも同じに設定した。

これで戦いの舞台は整いました。

Azure Load Testing のテスト開始

まず今回の検証結果ですが、タイミングや環境によって結果が異なる場合もございます。ご了承ください。

ほぼ同時にAzure Load Testing のテストを実施し、結果を見てみると一目瞭然です!!

上:Flex Consumption、下:Consumptionの統計情報

読み込み数、応答時間、スループットすべてにおいてFlex Consumption が勝っています。
そして普通のConsumptionはエラーが多発している!?

Flex Consumptionのテスト結果

↑こちらがFlex Consumption のテスト結果。応答時間がギザギザしているのはスケールアウトがうまく働いているのだろうか?

従来のFunctions 従量課金のテスト結果

↑こちらが従来の従量課金プランのテスト結果。やはりエラーが気になる。
エラーの内容はSystem.InvalidOperationExceptionがほとんどで、負荷を減らしたら落ちなくなったので負荷のかかりすぎて落ちてるんじゃないかと睨んでます。

(低負荷版) 上↑:Flex Consumption、下:Consumptionの統計情報

低負荷でも性能差が明らかです。

この結果の差からも Flex Consumption の性能優位が明らかになりましたね。
今後もAzure Functions Flex Consumption の動向を追っていこうと思います。次はFlex Consumption と Consumption のコスト比較をしてみようかなと思っています。

(追記)Flex Consumption Plan の料金形態について調べてみた記事を書きました。
onarimon.jp

参考ページ

qiita.com

learn.microsoft.com