処理60個の図を、同時に動かす数を変えて回しました。1個から4個にすると891分が275分になります。
そこから8個に倍増しても275分のままでした。稼働率だけが81.0%から40.5%に落ちます。
短縮できるのは依存をたどった最長の道のりまでです。そこから先は稼働率が落ちるだけでした。
Apache Airflowが扱うのは、順番と依存です。出典もその2つを挙げています。
説明は4つの処理A・B・C・Dを定め、それらが動く順番と、どの処理が何に依存するかを決めるというものです。
順番が決まっているなら、同時に動かせる数には上限があります。その上限を実際に測りました。
処理60個の図を作りました。依存が終わった処理から、空いている担当に割り当てます。
処理 60個。合計の作業時間 891分、依存をたどった最長の道のり 275分 依存が終わった処理から、空いている担当に割り当てる 同時に動かす数 全体の終了まで 1担当あたりの稼働率 1つ前からの短縮 1個 891分 100.0% — 2個 455分 97.8% 436分 4個 275分 81.0% 180分 8個 275分 40.5% 0分 16個 275分 20.3% 0分 32個 275分 10.1% 0分
1個から2個で436分、2個から4個で180分縮みました。ここまでは倍にした分が返ってきます。
4個から8個は0分です。16個でも32個でも275分のまま動きません。
275分は依存をたどった最長の道のりです。この道の上の処理は、どうやっても順番に動きます。
つまり担当を増やす前に、その値を計算しておけます。合計891分を最長の道のり275分で割ると3.2で、効くのは4個あたりまでという見当がつきます。
処理を並べる話そのものはジョブスケジューリングの記事でも測っています。
縮むのは4個まで。そこから先は動かない。
It defines four Tasks - A, B, C, and D - and dictates the order in which they have to run, and which tasks depend on what others.原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18
処理と依存だけでなく、いつ動かすか、失敗したらどうするかまで同じ場所に書きます。
Apache Airflowでは、まとまりをDAGと呼びます。出典はこれを次のように定めています。
DAGとは、あるひとまとまりの処理を実行するのに必要なものすべてを包み込んだ模型であるという言い方です。
「必要なものすべて」の中身は、おおよそ次の4つになります。
3番目と4番目が同じ場所にあるのが要点です。間隔と失敗時の扱いを、処理の外から後付けしません。
図を置くだけでは動きません。時刻を見て起こす役、処理を実行する役、状態を書き留める場所が要ります。
状態を書き留める場所は特に重要です。どこまで終わったかが残っていないと、途中から再開できません。
書き留める場所が1つなので、そこが止まると全部止まります。ここだけは冗長化の対象に入れておくことになります。
A Dag is a model that encapsulates everything needed to execute a workflow.原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18
1つ落ちれば先が止まります。1回のやり直しを入れるだけで30.4%が97.7%になりました。
Apache Airflowの既定では、依存する処理がすべて成功したときだけ次に進みます。出典もそう述べています。
既定では、DAGはある処理を、それが依存する処理がすべて成功したときにのみ動かすという記述です。1つ落ちれば、その先は動きません。
この性質は、処理の数が増えるほど効いてきます。1つあたりの失敗率が低くても、全部通る確率は下がります。
同じ60個の図で、1回あたり2%の確率で一時的に失敗するとしました。
処理 60個。1回あたり 2%の確率で一時的に失敗する やり直す前に 5分待つ。全部成功しなければ、その日の結果は出ない やり直しの回数 最後まで通った割合 やり直した回数(平均) 遅れ(平均) 0回 30.4% 0.00回 0.0分 1回 97.7% 1.19回 23.9分 2回 99.9% 1.23回 24.4分 3回 100.0% 1.24回 24.1分
やり直しなしでは30.4%です。7割の日は、どこかで止まって結果が出ません。
1回入れると97.7%になります。増えた手間は平均1.19回のやり直しと23.9分の遅れでした。
2回にすると99.9%、3回で100.0%です。伸びしろは2.2ポイントしかありません。
やり直した回数も1.19回から1.24回までしか増えません。2回目を使う日がほとんどないためです。
同じ失敗が2回続くのは0.04%です。2回落ちたら一時的な失敗ではないと考えて、人が見るほうが早い場面もあります。
1回のやり直しで、通らない日が7割から2%台になる。
失敗は処理ごとに独立として置きました。実際には上流が落ちれば下流もまとめて落ちるので、独立ではありません。また2%という失敗率も置いた値です。ここで見せているのは、1つあたりが低くても数が多ければ全体は通らなくなることと、その打ち消しは1回のやり直しでほぼ済むという関係です。
By default, a Dag will only run a Task when all the Tasks it depends on are successful.原文Apache Airflow 公式ドキュメント「DAGs」(Core Concepts) この内容の有効期限2027-02-18
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る