インフラ要素となるのかアプリケーション要素となるのかいつもプロジェクトで騒動を巻き起こすジョブ管理に関する話題です。ジョブ管理は"バッチ"や"ツール"等色々な形で呼ばれ、特に Web アプリケーション+RDBMS を中心としたプロジェクトで多用されているようです。
世界中のどこでも共通的に利用され、cron(Linux/Unix)、タスク(Windows)等の多くのディストリビューションに付属された簡易なものから商用プロダクトまでツールは充実されてきています。
日本だとよく聞くのが [Hinemos](オープンソース)、日立の [JP1](商用)等で、これらは把握しやすい GUI インタフェースを備え、ジョブがどのように実行されるのか、「ジョブ B が実行されるまでにはジョブ A が実行されていなければならない」等の細かな条件付けの定義や失敗時の挙動等を簡単に設定することが可能です。
開発者と保守担当者の分担を用意にするジョブ管理ツール
ジョブ管理をするとどんな特があるのでしょうか。通常ジョブ、すなわちプログラムは開発者が作ります。ジョブ管理ツールがない場合、cron や手動で実行することもあるかもしれません。自分が作成したプログラムの為、開発者は次のような状況が発生しても対処することができます。
- ジョブの依存関係の把握
- ジョブ失敗時の対応
- ジョブ失敗時の障害解析
- ジョブ実行時間変更
- ジョブ追加・削除
- ジョブの処理変更
一方開発者がそのまま保守担当者となるのであれば問題ないのですが、この開発者がこのプロジェクトを離れてしまった場合、保守担当者が対応することになります。
上記の作業に対する手順・ドキュメントが明確化され保守担当者にも行き届いていれば問題ありません。ただ、このようなドキュメントベースの運用はプロジェクトごとに異なり項目に漏れがあったり伝わりにくかったり等いくつか問題があります。
こんな時ジョブ管理ツールを導入していると状況は変わってくるかもしれません。ジョブ管理ツールは否が応にも上記項目の内「ジョブ失敗時の障害解析」「ジョブの処理変更」以外を決定・定義しておく必要があります。この為、この定義はプロジェクト運用後何年も残り続け保守作業を楽にします。
一方でジョブ管理ツールは常にコストがかかります。オープンソースのツールであっても習熟やドキュメント整理を考えると確実にコストはかかってゆきます。
アプリケーションが大きくなればなるほどジョブ管理は難しくなってきます。管理が複雑になるほど伝達も難しくなってくるでしょう。適切なジョブ管理は初期コストはかかるものの保守・運用コストを下げることになります。是非とも検討してみて下さい。