2017-06-17 26 views
1

私はAzure関数を実装することを検討しているコードをいくつか持っています。メモリの制限と関数の規模についての質問/懸念があります。Azure関数 - スケーリングとメモリの制限

ハイエンドでは、アプリケーションは1回の実行で約800 MBのメモリを使用する可能性があるため、使用できる最大メモリが1536 MBであれば、メモリ不足なしに1回の同時実行しかできません。

私の理解では、x同時実行では最大10個のインスタンスが存在することができますが、最大容量では実行が1時間しか実行できない場合は、タイムアウトせずに実行することができます。最大同時実行数は1になり、最大10個のインスタンスに自動的に拡大されます。

もしそうなら、それはほとんどの実行がこれよりもはるかに少ないメモリを必要とすると思いますので、一種のバマーです。

これはファイル操作関数なので、入力ファイルのサイズに基づいてどれくらいのメモリを使用するかについて合理的に正確に推測できるため、バックエンドを再構成して入力サイズに基づいてさまざまなキューを作成すると、私はハイエンドのものに対して1つのキューを持つことができます(1インスタンスにつき1回の実行しか許されません)。そして、それを他のサイズのキューに分割し、最大並列インスタンスを手動で調整します。

可能な限り多くの実行= 1制限されていない機能として、1MB未満のファイルの場合は1キュー。
1つのキューは1mb~10mbの入力ファイルであり、20回の同時実行に制限されています。 など

それよりも多くの作業が必要なように感じますが、あまりにも痛みではありません。

これは賢明なアプローチのように見えますか、それとも簡単な方法ですか?

どのようにして同時実行数を制限しますか。背景の説明の

答えて

1

カップル:

  • ブロブ処理は、キューによって舞台裏処理されます。新しい(または変更された)ブロブを見つけると、そのブロブ情報をキューメッセージに入れてエンキューします。つまり、キューのhost.jsonで使用可能な設定は、BLOB処理にも適用されます。
  • 機能のキュー構成はホストレベルであり、すべてのキューで使用されます。あなたのシナリオが機能するには、ファイルサイズのバッチごとに関数アプリを作成し、そのアプリのhost.jsonに - >batchSizeを設定する必要があります。メモリの制限に遭遇する可能性があるため、同じホスト上で複数の機能を並列に実行する必要がないため、これは最善の策かもしれません。

私は、利用可能な最大インスタンス数をどこにでも公開するとは思っていませんが、10はもはや制限ではないことがわかります。それはその後解除された初期の制限でした。あなたの最善の策は、それを試して、あなたがどのように拡大縮小するか見ることです。 Application Insights supportを追加すると、現在ライブストリームで実行されているインスタンスの数を簡単に確認できます。