Skip to content

Instantly share code, notes, and snippets.

@toriwasa
Created January 16, 2019 09:31
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save toriwasa/d03d96ed03874dbe2a0065471c86c471 to your computer and use it in GitHub Desktop.
Save toriwasa/d03d96ed03874dbe2a0065471c86c471 to your computer and use it in GitHub Desktop.
バッチ処理を設計する際の方針

バッチ処理の設計・改善のためのチェック項目

  • バッチ処理を新しく作るときの設計や、既存のバッチ運用を引き継いで改修を行う際の方針
  • 面倒なので運用時に考えること・手数を減らしたい

データのライフサイクル

  • バッチ処理結果データの保持期限・削除基準は決まっているか?
  • 保持期限を過ぎたデータを削除する処理は実装されているか?

ログ出力

  • 処理失敗時に事態を把握するため、バッチ処理を行う対象データの範囲、バッチ処理の開始時刻・終了時刻をログに出力しているか
  • 処理失敗時、途中から再開できるようにどの処理・どの行でコケたかを出力しているか
  • パフォーマンス劣化を監視するためのバッチ処理の所用時間を開始時刻・終了時刻から毎回計算せずとも済むようにログに出力しているか
  • 終了見込み時間を報告できるようにするため、処理の進捗状況が分かるようなログを出力しているか
  • ログからコピペしてすぐにlessできるように結果ファイルの絶対パスを出力しているか
  • ログローテーションの設定はされているか?

冪等性

  • 処理が途中で失敗したりkillされたとしても、再実行するだけでリカバリ可能なロジックになっているか?

実行条件の判定

  • 処理に必要なディレクトリやファイルの有無は事前にチェックしているか?
  • 前処理が失敗している場合、無理やり動かずちゃんとエラーで落ちるか?

範囲指定での実行

  • バッチが複数回動作しなかった場合、手動実行を回数分ループさせてリカバリが必要な処理か?
    • 実行時に引数で範囲指定して一括実行ができるか?
  • リカバリ作業の内容がルーチン化できる内容か?
    • リカバリ作業をワンボタンで行えるようにコマンド化しているか?

多重起動防止

  • 前回の処理が生き残っている間に次の処理が動くと不具合があるか?
    • 処理が多重起動しないようにロックファイルを生成しているか?
    • 処理途中にコケてもロックファイルが削除されるか?

起動禁止ファイル

  • 運用上、ジョブが混雑している等で一時的に動作を止めておきたいケースはあるか?
    • crontabのコメントアウト処理忘れなど、オペミスをなくすために停止ファイルを参照して起動防止をしているか?

オペミス防止のために

  • 実行時の引数に応じてログだけ吐き出すdryrunオプションはあるか?
  • 手動実行時、入力された引数から処理内容を確認させるダイアログは出しているか?

異常検知アラート

  • 処理が失敗した場合にメールやメッセージが運用者に飛ぶようになっているか?

参考にしたサイト

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment