template.synchronizationはWorkflow毎ではなくグローバルな並列上限数
template.synchronizationはWorkflow毎ではなくグローバルな並列上限数
semaphoreは「名前付きの共有カウンタ」 である
ConfigMap のキーで識別され、そのキーを参照する全Workflow・全ノードで1個のカウンタを共有する
template.synchronization が付いたノードは、起動時にカウンタを1消費する
具体例
こういうケースを考える
Workflow Aがあり、その中でtemlate Bを3つ並列実行する
つまり、
A1の中で、B_A1_1, B_A1_2, B_A1_3が走る
この時、以下のように設定したとする
spec.synchronization = 3
つまり、A自体の並列数
A1, A2, A3は並列になるが、A4以降は待ちになる
こっちは単純mrsekut.icon
template.synchronization = 2
つまり、Bの並列数
この時、以下2つの解釈がありうるmrsekut.icon
① Aごとに上限は2つまで?
つまり、
B_A1_1, B_A1_2
B_A2_1, B_A2_2
B_A3_1, B_A3_2
の6つは並列に動くが、B_A1_3は待ちになる
② グローバルにBの上限は2つまで?
例えば、
B_A1_1
B_A2_1
の2つまでは並列に動くが、B_A3_1やB_A1_2は待ちになる
結論、②が正しい
「Workflow ごとに2つまで」ではなく「全体で2つまで」
template の semaphore がグローバルな共有カウンタなので、templateは全体で2個までとなる
いつ使う?
例えば、外部サービスにリクエストを送る場合、全体でのRate Limitを気にする必要がある