上記のジョブ定義DSLは、1つのバッチ実行を定義するだけでなく、依存関係にあるような複数のバッチを1つのジョブとして定義することができます。command3のように、command2-aとcommand2-bは並列実行され、2つの実行が終了したところで、command3が実行されるようなワークフローも定義することができます。command2-bがエラーになった場合、そこでワークフローは一時停止し、実行をリトライあるいはスキップさせることもできます。想定実行時間を超えたらジョブの管理者にアラートを送る上記のようなDSLがあります。DSLの追加が簡単に行えるようになっており、今後の環境変化などに柔軟に対応できるように設計されています。ジョブ実行の管理エラーや状態の管理についてジョブ実行中に何らかの原因でエラーが起きたときのkuroko2の挙動について説明します。ステータスを持っており上記のような流れになります。終端ステータスは、SUCCESSとCANCELになり、ERRORの場合はジョブ内のエラーが起きたバッチをリトライやスキップ、あるいはジョブ自体をキャンセルします。ERRORが終端ステータスではない理由は、ERRORになったということは途中までしか実行できず完了していないという意味でWORKINGと同じ扱い、という理由です。ERRORの状態からリトライが行えるような機能となっています。エラーが発生したときは、メールやチャットで管理者に通知し、エラーのまま放置されている場合にもエラーの状態が解決されるまでアラートメールを送信します。これらの機能によって、エラーが発生した場合には管理者は素早く気づいて対応が行うことができ、ジョブがエラーのまま放置されるような事態も防げるようになっています。多重実行についてバッチ実行の際に気をつけるべきものとして、同じバッチが多重に実行されてしまうことです。バッチの実行が想定外に時間がかかりスケジューリングされた次の実行の時間になってしまったり、意図せず手動で多重に実行してまい事故に繋がることもあります。多重実行を避けるコードを、すべてのバッチに個別に実装していくのは骨が折れるため、kuroko2はジョブの定義として、多重実行の可否を定義できるようになっています。エラーが起きたときにスケジュールされたジョブの実行を止める例えば、1日1回必ず実行されることが前提で、1日でも歯抜けになってしまうとデータに齟齬が生じてしまうため、日付の順番通りに実行しなければいけないバッチがあったとします。いったバッチがエラーになった場合、その日のうちに担当者がリカバリできれば問題ないですが、それを絶対に行えるという保証はありません。kuroko2ではジョブがエラーになり上記のERRORステータスのままの履歴が存在している場合、それ以降のジョブのスケジュールを自動でキャンセルする機能があります。すべてリカバリを行い、エラーが解決されたところでスケジュール通りに実行するように再開されます。これは特に休日や連休などすぐに対応できない場合に、最悪の事態が起きないような防御策として有効です。ジョブの一覧管理kuroko2では大量にジョブを管理しているため、ジョブを素早く探せることや、管理しているジョブの状態を素早く知れることは非常に重要です。UIには検索機能やダッシュボードがあり以下のような機能が提供されています。実行中のジョブの一覧Dockerコンテナの活用kuroko2の欠点として、新規のプロジェクトで新たにアプリケーションがバッチを実行したいときには、そのアプリケーションが動作できるように環境構築の作業が発生してしまうことです。よるDocker環境の整備が進められており、バッチ実行に関してもDockerの恩恵が受けられるようになっています。具体的には、Dockerイメージをジョブ実行の際にpull、コンテナを立ち上げ、Dockerコンテナ内でコマンドを実行できるようにしたものです。Dockerを利用することで、アプリケーションサーバーにも使えるDockerイメージを1つ作るだけでジョブ管理システム上での環境構築を行う必要なく、ジョブ管理システム上でバッチが実行できるようになりました。最後にクックパッドで利用されているジョブ管理システムとその周辺について簡単に紹介しました。残念ながらkuroko2はオープンソース化の予定はありませんが、今回紹介した運用方法や機能などの知見は過去の経験や失敗を元にしたものが多く、ジョブ管理やバッチ実行の管理を行うエンジニアにとっては、同じような悩みや問題を抱えていたりするのではないかと思います。いった方々にとって、今回の記事が参考になれば幸いです。〜DWH外観図〜こんにちは、今年の1月に会員事業部から技術部データ基盤グルー...2019-07-13冪等なデータ処理ジョブを書くこんにちは、マーケティングサポート事業部データインテリジェ...2019-06-17レシピ検索を支えるレガシーでクリティカルな大規模バッチを刷新した話こんにちは、会員事業部の新井です。vol.3】こんにちは。使ったセキュリティログ検索基盤の構築サービス特性にあった検索システムの設計戦略クックパッド採用説明会「クックパッドはサービスの作り手を採用したいんです。/*}*/スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。