🤧

バッチ処理システム及びジョブ管理ツールについて

に公開

はじめに

新規プラットフォーム構築時にバッチ処理が必要になったため、バッチ処理について整理した。
定時にスクリプト起動のような単純なバッチではなく、複数のバッチ・条件が絡むユースケースから検討する。ジョブ管理ツールの導入についても検討する。

依存関係を持つバッチを組み立てる

「A」のバッチ処理が完了することを条件に「B」のバッチ処理を実行する。「A」のバッチ処理が完了しないと「B」のバッチ処理は実行しない。

  • 「A」は「B」の先行処理にあたる。
  • 「B」は「A」の後続処理にあたる。
  • 「B」は「A」に依存している関係を示す。依存関係(Dependency)が成り立つ。
  • 処理が順番に実行されること(順次実行)となる。

「A」と「B」のバッチ処理が両方完了することを条件に「C」のバッチ処理を実施する。「A」のバッチ処理が完了しない、もしくは「B」のバッチ処理が完了しない場合は、「C」のバッチ処理は実行しない。

  • 「A」と「B」が「C」の複数先行処理にあたる。
  • 「A」と「B」の両方の完了を待つ、AND条件を示す。

上記のような依存関係を持つバッチ処理を、ジョブネットまたはジョブフローという。ジョブネットとは、複数のバッチ処理(ジョブ)の実行順序や依存関係を定義したもの。多くの場合、複雑な依存関係はジョブネットとして管理される。
広範な意味で、ワークフローという場合もある。ワークフローは、一連のタスクや処理の流れを定義するもので、バッチ処理の依存関係もワークフローの一部とみなすことができる、

ジョブネットやワークフローとどのように実装するか

タスクスケジューラーでのユースケース

一番簡易なバッチのユースケースは、Windows OS環境下でのタスクスケジューラが思い当たるので、その環境でジョブネットの実現は可能か、Geminiへ確認。
Gemini: そのままでは困難であるが、工夫次第である程度は実現可能。主にスクリプト(PowerShell, コマンドプロンプトバッチファイル)を活用する。つまり、依存関係のスクリプトでロジックに落とし込む必要がある。

  • 先行タスクの完了確認: 後続タスクのスクリプト内で、先行タスクが正常に完了したことを示すフラグファイルの存在や、データベースの更新状況などを確認するロジックを実装。
  • 複数先行タスクのAND条件: すべての先行タスクが完了したことを示す複数のフラグファイルやデータベースの状態をスクリプト内でチェックし、すべてがOKであれば後続処理を開始する。
  • リターンコードの利用: 各バッチ処理は、成功なら0、失敗なら0以外のリターンコードを返すように設計し、後続のスクリプトでこのリターンコードをチェックして処理を分岐させる。

グラフィカルではないので、運用が煩雑そうに見える。

crontabでのユースケース

ジョブネットを実現するには、やはりシェルスクリプトを活用する必要がある。基本的な考え方はWindowsのタスクスケジューラーで述べたものと同じになる。

ジョブ管理ツール

タスクスケジューラーやcrontabのユースケースでは、グラフィカルにジョブの状況を把握できない点が、運用上の大きな難点となり得る。そこで、その弱点を補うために、多種多様なジョブ管理ツール(ジョブスケジューラー)が存在する理解で良さそう。

ジョブ管理ツールのメリット

  • グラフィカルインターフェース
    • ジョブの依存関係が矢印で結ばれ、各ジョブのステータス(成功、失敗、実行中)が色分けされて表示されるようなイメージ
  • 高度な依存関係管理
    • AND/OR条件、ファイル到着、データベースの更新、リターンコード
    • 時間ベース、イベントベース
  • 集中管理と監視
    • 複数のサーバーに分散しているジョブを一元的に管理し、実行状況をリアルタイムで監視する。実行ログや履歴を集中管理し、検索や分析が可能。
  • セキュリティと監査
    • ユーザーごとの権限管理や、ジョブの変更履歴の追跡など、セキュリティとコンプライアンスを強化する機能

代表的なジョブ管理ツール

ジョブ管理ツールは非常に多岐にわたるため、タイプ別に分類する。

  • エンタープライズジョブスケジューラー: 大手ベンダーが提供する、大規模なシステム運用に耐えうる高機能な製品群。ライセンス費用が必要となる。
    • JP1/Automatic Job Management System 3 (日立製作所)
    • Hinemos (NTTデータ先端技術)
    • ActiveBatch (Advanced Systems Concepts)
    • Tivoli Workload Scheduler (IBM)
    • Control-M (BMC Software)
  • オープンソースソフトウェア(OSS)ワークフローエンジン: 基本的に無料で利用できるため、ライセンス費用を抑えることができる。
    • Apache Airflow
    • Luigi (Spotify)
    • Prefect
    • Apache Oozie (Hadoopエコシステム向け)
  • クラウドベンダー提供のマネージドサービス: 主要クラウドプロバイダ提供のワークフローオーケストレーションサービス
    • AWS Step Functions
    • Azure Data Factory
    • Google Cloud Composer (Airflowのマネージドサービス)

ジョブ管理ツールの導入について

複雑な依存関係を持たせることが有用に働くユースケースの場合は、ジョブネットを管理できるジョブ管理ツールを選定すべきである。特に、ジョブネットをグラフィカルインターフェースで確認できることが運用上大きいかどうかでジョブ管理ツールの導入は判断できる。

上記はGeminiさんによるジョブネットのグラフィカルインタフェースの図。バッチ処理に置いて上記が必要と判断できるのであれば、積極的にジョブ管理ツールを導入する。

Discussion