バッチ設計ガイドライン
Batch Design Guidelines
バッチ処理とは、大量のデータを一括で処理するための手法であり、システム開発において今なお重要な位置づけにある。バッチ処理の対義語は逐次処理(リアルタイム処理・ストリーム処理とも呼ぶ)であり、業務イベントが発生する度に何かしらの処理を実行することを指す。逐次処理は処理結果を即時確認できるが、それによってユーザー体験(UX)の向上しない場合や、開発コストの低減(基本的には逐次処理の方が設計・運用の難易度が高い)・コンピュータ資源を下げたいなどに、バッチ処理を選択することが多い。
バッチ処理は多くのシステムで存在するが、その規模や複雑度、システムにおける重要度は千差万別である。最も単純なケースではcronのようなスケジューラを用いて、バッチプログラムを単発起動で事足りるケースもある。より複雑なシステムでは、ワークフローエンジンを用いてDAGやジョブネットで管理すべきケースもある。
また、バッチ処理はバックグラウンドで起動するため、データ量によっては実行時間が数十分に達することもよくある。フロントエンドから呼ばれるWeb APIは1、2秒以内での応答速度を求められることと対象的である。そのため、バッチ処理はその特性上システム全体のパフォーマンスや運用効率に大きな影響を与える。本ガイドラインでは、バッチ処理設計におけるベストプラクティス、設計時の考慮点、運用における課題とその対策について詳述する。
免責事項
本ガイドラインは、バッチの設計、開発時に利用することを想定しているが、バックエンド領域で関連性が高いと考えられる以下の内容も含む。
対象とする技術は以下を想定している。
| 用語 | 説明 |
|---|---|
| バッチ処理 | 大量のデータを一括で処理するプログラミングモデルのこと |
| バッチ設計 | 本ガイドラインでは、「バッチ処理を行うプログラムの設計」を指す |
| ジョブ | バックグラウンドで動かす1つ1つのタスクを定義・実行するための基本単位。AirflowでいうOperatorに該当。ジョブで行う処理は様々で、ヘルスチェックのWeb APIを呼び出し成功失敗の判定するだけのジョブもありえる。本ガイドラインではジョブからバッチ処理を呼び出すことを指すことが多い |
| ワークフロー | 相互に依存関係を持つ複数ジョブの流れを定義したもの。JP1ではジョブネット、AirflowではDAGに相当する |
| オンライン操作 | 画面操作のこと |
このアーキテクチャガイドラインの作成には多くの方々にご協力いただいた。心より感謝申し上げる。