前書き
バッチ管理システムは、コンピューターシステム上で定期的に実行される自動化された処理を効果的に計画、実行、監視するためのソフトウェアツールやシステムのことを指します。
バッチ管理システム設計
バッチ管理システムを設計する際には、0から構築する場合も、サードパーティの製品を使用する場合も、いくつかの原則が存在します。
-
ジョブ管理
- ジョブ実行のタイミングを制御しなければならないです。
-
エラーハンドリング
-
エラー通知
、ジョブ失敗した場合の通知機能。 -
ロギング
、失敗成功にかかわらず、実行情報の保管が必要。
-
-
リトライ
- バッチ実行に失敗した場合、リトライできなければなりまん。自動、もしくは手動でリトライできる必要があります。
-
依存関係の制御
- バッチの間に依存関係存在していれば、それを制御可能にする、実行時間をずらすだけではアンチパタンになリます。
技術選定
最初のバッチ管理システムとして、cronを採用することは少なくありません。
cronは、Unix系オペレーティングシステムのジョブ管理ツールである。
cronは手軽で実装しやすいですが、管理が難しく、エラーハンドリングやリトライの実装には一手間かかります。
cronが限界に達すると、サードパーティのジョブ管理システムを導入することもあります。
周りではrundeckがよく使われます。ただし、それを導入しても、全ての問題が解決されるわけではありません。システムが動いているサーバーの管理が課題になります。
また、継続的に蓄積されるログの管理も必要です。これらの課題が残ります。
コンテナオートスケールサービスを使用したジョブ管理システム、例えば、ECS Scheduled Tasks
、EKS CronJob
も存在します。
マネージドサービスではないものの、AWSやその他のクラウドサービスの機能を巧みに活用することで、柔軟性の高いバッチ管理システムを構築できます。
ただし、実装者の技術力に依存するため、サードパーティサービスと比較して一長一短があります。
最後に
そのため、cron
、 ECS Scheduled Tasks
、 EKS CronJob
、 rundeck
など、要件に応じて適切に設計・実装されていれば、これらはすべてバッチ管理システムと見なせると考えています。