フロー優先度

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:4分
  • 実行を待機している他のフローと比較したバックグラウンドフローの優先度を指定します。優先度の低いフローを実行する前に、優先度の高いフローのグループを実行します。

    フロー優先度は、バックグラウンドで実行されるフローに対してのみ設定できます。バックグラウンドフローは、次に利用可能なワーカースレッドから実行されます。デフォルトでは、ワークフロースタジオ は利用可能なワーカースレッドの半分までを使用してバックグラウンドフローを実行できます。フローの実行に利用可能なワーカースレッドがない場合、そのフローは、それを実行するために利用可能なワーカースレッドができるまでキューに入れられます。

    バックグラウンドフローには次のいずれかの優先度の値を設定できます。
    • 高い
    • 中程度
    • 低い
    デフォルトでは、バックグラウンドフローは中程度の優先度で実行されます。
    注:
    フォアグラウンドで実行されるフローは現在のスレッドで実行されるため、フローの優先度によって実行順序が決定されることはありません。

    フローの優先度を設定すると、ワーカースレッドがキューからフローを選択する順序が決まります。ワーカースレッドは、優先度の高いフローをいくつか実行してから、優先度の低いフローを実行します。この優先度スキームによって、キューに優先度の高いフローがあっても、優先度の低いフローがいくつか実行されるようになります。実行する作業キューが大きい場合、優先度の低いフローの大部分は、優先度の高いフローが実行されるまで待機する必要があります。優先度の高いフローが実行された後に、優先度の低いフローが実行可能になります。

    フローがキュー内に 1 分以上残っている場合、システムはフローの実行を別のノードに委任します。フローが別のノードに委任されると、その優先度の値は失われます。委任されたノードはフローを時系列順にイベントキューからプルします。委任されたノードは、最初に最も古いフローを実行してから、最新のフローを実行します。一般に、別のノードからのフロー実行の委任は、ノードで利用可能なすべてのワーカースレッドがビジー状態の場合にのみ行われます。
    注:
    ワーカースレッドは、フローイベントだけでなく、すべてのシステムイベントを実行します。

    フローが何らかの理由で一時停止した場合にも、そのフローの優先度の値は失われます。一時停止から再開されるフローは、デフォルトの [中程度] の優先度で実行されます。たとえば、フローを高い優先度で開始してから、[期間が終わるまで待機 ( Wait for a Duration)] の条件で一時停止することができます。フローの実行が再開されると、[中程度] の優先度で実行されます。

    優先度の低いフローの自動一時停止

    デフォルトでは、優先度の高いフローが、実行中の優先度の低いフローによってブロックされているかどうかがチェックされます。優先度の低いフローが 2 分以上実行されると、システムは過去 5 分間に優先度の高いフローが実行されたかどうかをチェックします。優先度の高いフローがしばらく実行されていない場合、システムはイベントキューで実行を待機しているフローの数をチェックします。イベントキューで実行を待機している優先度の高いフローが 100 個以上バックログにあると、システムは実行中の優先度の低いフローを一時停止します。フローを一時停止すると、そのコンテキストとデータが保持されます。一時停止したフローはイベントキューに戻り、処理できるワーカーがあるときに実行されます。

    優先度の低いフローが期待どおりに実行されていない場合は、システムが生成して実行する優先度の高いフローの数を確認してください。フローの優先度を設定するタイミングについては、「デザインの検討」を参照してください。優先度の低いフローがまだ実行されていない場合は、システムプロパティを使用して優先度の低いフローの一時停止を無効にできます。com.glide.hub.pause_low_priority_flows_enabled プロパティの値を変更するには、「ワークフロースタジオ フローシステムプロパティ」を参照してください。

    クイック API のサポート

    クイック API のメソッドはフロー優先度の値をサポートしていません。クイック API のメソッドで実行されるフローは、以前に定義されたフロー優先度設定を無視して、中程度の優先度で実行されます。

    デザインの検討

    フロー優先度を設定するときは、デザインに関する次の検討事項に従ってください。

    すべてのフローを高い優先度で実行するように設定しない
    すべてのフローの優先度を高く設定するのではなく、複数の優先度を組み合わせて設定します。ワーカースレッドは、フロー間の相対的な優先度で作業を選択します。すべてのフローが高い優先度で実行されている場合、待機すべき優先度の低いフローはありません。
    一時停止する必要があるフローにはフロー優先度を設定しない
    一時停止する必要のあるフローは、デフォルトである中程度の優先度のままにしておきます。フローの実行を再開すると、その優先度の値が失われるためです。
    ビジネスクリティカルなフローには高い優先度を使用する
    優先度の高いフローは、ビジネス価値が高く、実行頻度が低く、実行時間が短いフローに限定します。他のフローを実行できるワーカースレッドの数が制限されるため、大量のフローを高い優先度に設定しないでください。高優先度のフローを長時間実行すると、他のフローの実行に使用可能なワーカースレッドが減る可能性もあります。
    ボリュームの大きなフローには低い優先度を使用する
    他の時間的制約のあるフローが最初に実行されるように、ボリュームの大きなフローは低い優先度で実行します。優先度の低いフローには時間的制約がないようにしてください。
    時間的制約のあるフローには中程度の優先度を使用する
    他のフローと比較して時間的な制約が高いフローには、デフォルトのフロー優先度を使用します。