Azure Functions の SingletonAttributeとModeプロパティ
今日職場でSingletonAttributeのModeプロパティに関する話が出てたので検証してみました。
ソースコードはこちら
TriggerTest1はSingleton(Mode=Function)
TriggerTest2はSingleton(Mode=Listner)
TriggerTest3はSingletonなし
動作環境はAppServiceプラン(S1 インスタンス数を10に固定)です。
まずはTest3のSingletonなしの結果から
同じ時間に並列実行されています。またPartitionKeyもバラバラです。PartitionKeyにはstatic Lazyで作成されたGuidを設定していますのでGuidの違いは実行インスタンスの違いを表しています。要するにSingletonを付けないキュートリガー関数は複数のインスタンスでそれぞれ並列処理が行われる感じになります。今回の場合は10インスタンスなので10インスタンス * デフォルトサイズ16 なので、最大同時実行数は160になります。
続いてTest1の結果はこんな感じ
Timeを見てみるとおおよそ秒毎に処理が実行されていますので、まさにシングル動作です。またPartitionKeyをみると結構バラバラです。
SingletonをFunctionモードで使用すると複数インスタンスであっても同時実行数1が保証される感じになります。
次にTest2の結果
ingletonを使っているのに同じ時間帯にFunctionが実行されています。しかしPartitionKeyに注目してください。全て一緒です。
SingletonをListnerモードで使用すると単一のインスタンスでの実行が保証されます。今回の場合にはバッチサイズはデフォルトなので最大同時実行数は16になります。
ではListnerモードはどのように有効活用すると良いか? という事ですが、私自身、これだ!!っていう決定的な活用法は思いついていないのですが
こちらで書いたような同時実行の細かな制御を行うのに良いのかなぁとか思っています。