フロー優先度
実行を待機している他のフローと比較したバックグラウンドフローの優先度を指定します。優先度の低いフローを実行する前に、優先度の高いフローのグループを実行します。
フロー優先度は、バックグラウンドで実行されるフローに対してのみ設定できます。バックグラウンドフローは、次に利用可能なワーカースレッドから実行されます。デフォルトでは、ワークフロースタジオ は利用可能なワーカースレッドの半分までを使用してバックグラウンドフローを実行できます。フローの実行に利用可能なワーカースレッドがない場合、そのフローは、それを実行するために利用可能なワーカースレッドができるまでキューに入れられます。
- 高い
- 中
- 低い
フローの優先度を設定すると、ワーカースレッドがキューからフローを選択する順序が決まります。ワーカースレッドは、優先度の高いフローをいくつか実行してから、優先度の低いフローを実行します。この優先度スキームによって、キューに優先度の高いフローがあっても、優先度の低いフローがいくつか実行されるようになります。実行する作業キューが大きい場合、優先度の低いフローの大部分は、優先度の高いフローが実行されるまで待機する必要があります。優先度の高いフローが実行された後に、優先度の低いフローが実行可能になります。
フローが何らかの理由で一時停止した場合にも、そのフローの優先度の値は失われます。一時停止から再開されるフローは、デフォルトの [中程度] の優先度で実行されます。たとえば、フローを高い優先度で開始してから、[期間が終わるまで待機 ( Wait for a Duration)] の条件で一時停止することができます。フローの実行が再開されると、[中程度] の優先度で実行されます。
優先度の低いフローの自動一時停止
デフォルトでは、優先度の高いフローが、実行中の優先度の低いフローによってブロックされているかどうかがチェックされます。優先度の低いフローが 2 分以上実行されると、システムは過去 5 分間に優先度の高いフローが実行されたかどうかをチェックします。優先度の高いフローがしばらく実行されていない場合、システムはイベントキューで実行を待機しているフローの数をチェックします。イベントキューで実行を待機している優先度の高いフローが 100 個以上バックログにあると、システムは実行中の優先度の低いフローを一時停止します。フローを一時停止すると、そのコンテキストとデータが保持されます。一時停止したフローはイベントキューに戻り、処理できるワーカーがあるときに実行されます。
優先度の低いフローが期待どおりに実行されていない場合は、システムが生成して実行する優先度の高いフローの数を確認してください。フローの優先度を設定するタイミングについては、「デザインの検討」を参照してください。優先度の低いフローがまだ実行されていない場合は、システムプロパティを使用して優先度の低いフローの一時停止を無効にできます。com.glide.hub.pause_low_priority_flows_enabled プロパティの値を変更するには、「ワークフロースタジオ フローシステムプロパティ」を参照してください。
クイック API のサポート
クイック API メソッドは優先度設定を保持します。クイック API メソッドによって実行されるフローは、以前にフローに対して定義されたものと同じ優先度で実行されます。
デザインの検討
フロー優先度を設定するときは、デザインに関する次の検討事項に従ってください。
- すべてのフローを高い優先度で実行するように設定しない
- すべてのフローの優先度を高く設定するのではなく、複数の優先度を組み合わせて設定します。ワーカースレッドは、フロー間の相対的な優先度で作業を選択します。すべてのフローが高い優先度で実行されている場合、待機すべき優先度の低いフローはありません。
- 一時停止する必要があるフローにはフロー優先度を設定しない
- 一時停止する必要のあるフローは、デフォルトである中程度の優先度のままにしておきます。フローの実行を再開すると、その優先度の値が失われるためです。
- ビジネスクリティカルなフローには高い優先度を使用する
- 優先度の高いフローは、ビジネス価値が高く、実行頻度が低く、実行時間が短いフローに限定します。他のフローを実行できるワーカースレッドの数が制限されるため、大量のフローを高い優先度に設定しないでください。高優先度のフローを長時間実行すると、他のフローの実行に使用可能なワーカースレッドが減る可能性もあります。
- ボリュームの大きなフローには低い優先度を使用する
- 他の時間的制約のあるフローが最初に実行されるように、ボリュームの大きなフローは低い優先度で実行します。優先度の低いフローには時間的制約がないようにしてください。
- 時間的制約のあるフローには中程度の優先度を使用する
- 他のフローと比較して時間的な制約が高いフローには、デフォルトのフロー優先度を使用します。