開発基盤グループの大石です。今回はクックパッドで利用されているRuby製のジョブ管理ツールkuroko2について紹介したいと思います。クックパッドでは2011年頃より、kurokoというジョブ管理ツールがありました。よって開発され現在に至っています。商用のジョブ管理ツールは昔からありますし、ここ最近はAirflowやAzkabanなどのOSSのツールが存在しており、わざわざ自社でジョブ管理ツールを作る必要は無いのかもしれません。kurokoが開発された当時はそこまでの完成度のOSSのジョブ管理ツールは存在していなかったということと、過去のバッチ資産も問題なく動作させることでき、機能追加など自分たちの望む形に素早く進化させやすいため、自社製のジョブ管理ツールを使っています。UIの主な機能は以下のようなものになります。実行中のジョブの確認、実行中のジョブの強制停止などのオペレーション実行履歴、実行時のログ確認job-schedulercronスタイルで設定されたスケジュールに合わせて実行するべきジョブをworkflow-processorへ伝えます。workflow-processorジョブの定義から実際に実行されるコマンドやワークフローをcommand-executorへ伝えます。UIを通じてworkflow-processor経由で行われます。インスタンス上で動作し、実行可能なジョブを逐次実行します。受け取り実行中のバッチを停止させるcommand-killerと呼ばれるワーカーも起動させます。1つのマシン上で複数のcommand-executorが動作してるので、大量のメモリやCPUを消費するようなバッチの場合は、それに合わせた性能の専用のインスタンスを立て、それに向けてジョブを実行することが可能です。機能ジョブの定義方法メンテナンスや障害時にはインフラチームが確認することもあるため、他の部署が見たときのために、どのようなジョブなのか、どのような影響があるのか、障害時にどのような対応をするべきかを把握できることが重要です。kuroko2では、設定時に入力するジョブの内容説明のテキストフィールドに、プレースホルダーとしてテンプレートが用意されており、Markdown記法を採用することで、これらの情報を記述、管理しやすいように工夫がされています。呼ばれるDSLを記述していきます。基本的な記述例は下記のようになります。後に書かれたものは、command-executorからシェルにそのまま渡される単なるシェルコマンドになります。クックパッドでは、多くのアプリケーションでRailsを採用しています。コマンドで実行できるようにしています。拡張したDSLを用意して、それを経由してバッチを実行しています。Rails以外にも対応しています。