Secret Ninja Blog

Support Engineering Director してます

Digdag v0.10がリリースされたので簡単な内容紹介

ついにDigdag v0.10がリリースされました!

Release 0.10.0 — Digdag 0.10.0-SNAPSHOT documentation

トレジャーデータのWorkflowチームは、マルチテナントとしてサービス提供しているTreasure Workflowの開発やメンテ、不具合調査などに加えて、DigdagのOSS対応もあるので、殊更大変だったと思います。 ちなみに、Treasure WorkflowではDigdag v0.10(正確には同じではないですが)が何ヶ月も動いているので、皆様も安心してご利用いただけると思います!

サポートをしていて特に恩恵があったところを簡単に紹介したいと思います。 (私自身が開発しているわけじゃないので、若干正確性に欠ける点があるのでご容赦ください)

_parallelで並列数の上限を設定できるようになりました。

従来は下記のように並列実行を許可した際に、全てのタスクが同時に走るという挙動でした。 しかし、ループ数が多い場合などは一度に大量のタスクが実行されて、他のタスクの実行を邪魔してしまうなどの課題がありました。

+prepare:
  # +data1, +data2, and +data3 run in parallel.
  _parallel: true

  +data1:
    sh>: tasks/prepare_data1.sh

  +data2:
    sh>: tasks/prepare_data2.sh

  +data3:
    sh>: tasks/prepare_data3.sh

+analyze:
  sh>: tasks/analyze_prepared_data_sets.sh

そこで、limitというオプションを用意することで、並列数の上限を設定できるようになり、下記の場合には同時に2タスクが並列に走るといったことが制御できるようになりました。

+prepare:
  # +data1 and +data2 run in parallel, then +data3 and +data4 run in parallel.
  # (+data1 and +data2 need to be successful.)
  _parallel:
    limit: 2

  +data1:
    sh>: tasks/prepare_data1.sh

  +data2:
    sh>: tasks/prepare_data2.sh

  +data3:
    sh>: tasks/prepare_data3.sh

  +data4:
    sh>: tasks/prepare_data4.sh

+analyze:
  sh>: tasks/analyze_prepared_data_sets.sh

Site ID毎にTaskとAttemptの上限変更ができるようになりました。

これまではDigdag Server全体で一意に上限の設定となっていましたが、site idで分割できます。 Site IDで分割して利用しているケースがどの程度あるかわかりませんが、トレジャーデータの場合はSite IDごとにお客様環境を分けるようになっており、 これによりお客様ごとに上限が可変できるようになります。(なるに違いない)

JavascriptのエンジンがNashornからGraaljsに変わりました。

DigdagのJavascriptのエンジンには、Nashornが使われてましたが、Java11からdeprecatedされたため、Graaljsに変わりました。 後方互換性が壊れないかの検証をかなり頑張っていたので、弊社の顧客からも移行に伴っての問題は起きなかったです。

さらに、Java11への対応もしくはこの変更により、Digdagで大量にProjectがある場合に、TaskとTaskの間の起動時間が徐々に伸びていくという事象やDigdag Serverの高負荷が観測されており、定期的なサーバの再起動による対応を行っていましたしかし、Java11 + Graaljsに変更してからはそうした問題の解消し、安定性が格段に増しています。

3rd party toolの紹介ページが追加されました。

コミュニティで作られたプラグインのリストが下記に追加されました。皆さんが何かdigdagに関連するツールを作った際にはぜひPRを送ってみてください。

Community Contributions — Digdag 0.10.0-SNAPSHOT documentation

他にも色々ありますが、個人的にこのあたりがユーザにとって目に見えて嬉しいところかなーと思います! (より詳しい紹介はきっと誰かが書いてくれるに違いない)