Upgrade to Pro — share decks privately, control downloads, hide ads and more …

NetadashiMeetup#13 バッチは地味だが役に立つ2

NetadashiMeetup#13 バッチは地味だが役に立つ2

HayashiYuichiro

January 30, 2025
Tweet

More Decks by HayashiYuichiro

Other Decks in Technology

Transcript

  1. バッチの定義 バッチの定義はヒトやプロジェクト等によって異なる! バッチの語源通りに分類する派 と考えています 語源の通り一定量のデータ処理するものを バッチ処理方式であるとしつつ、 ファイル削除やマスタレコード更新などの 単発処理もバッチ処理として見なす派 バッチ=群、団、束 (引用:weblio英和時点・和英辞典)

    語源の通りバッチとは一定量のデータを 処理する処理方式であるとし、 ファイル削除やマスタレコード更新などの 単発処理はバッチ処理ではないとする派 実行形態で分類する派 言葉の定義としてはこちらが正 システム開発現場ではこちらの考えが多い印象 スケジュール/イベント/手動で起動
  2. バッチの定義 バッチの定義はヒトやプロジェクト等によって異なる! バッチの語源通りに分類する派 と考えています 語源の通り一定量のデータ処理するものを バッチ処理方式であるとしつつ、 ファイル削除やマスタレコード更新などの 単発処理もバッチ処理として見なす派 バッチ=群、団、束 (引用:weblio英和時点・和英辞典)

    語源の通りバッチとは一定量のデータを 処理する処理方式であるとし、 ファイル削除やマスタレコード更新などの 単発処理はバッチ処理ではないとする派 実行形態で分類する派 言葉の定義としてはこちらが正 システム開発現場ではこちらの考えが多い印象 スケジュール/イベント/手動で起動 私はこっち派
  3. バッチに関連する単語 プロジェクトや利用ツールによって単語やニュアンスが異なる Webアプリ以上に単語の定義や包含関係の明確化が重要 バッチ ジョブ タスク ジョブ ネット グループ フレーム

    ステップ ウインド ウ DAG ワーク フロー 単語の定義をはじめとしてバッチアプリケーション開発では バッチ独自観点で考えなければならないことがいくつかあります
  4. アプリとジョブマネージャー間での役割分担方針 アプリは業務処理に関する最低限の機能のみを実装する それ以外の機能はできる限りジョブマネージャー側に寄せる • ジョブネットの定義 • ジョブ実行結果による後続ジョブの実行制御(実行するジョブの分岐等) • ジョブのスケジューリング起動/手動起動 •

    カレンダーによるジョブ実行日の管理(祝日における実行抑止制御など) • ジョブ実行時間の監視と想定実行時間超過時のアラート発報 • ジョブのリトライ制御(ジョブ内の特定処理ではなくジョブ本体のリトライ制御) • ジョブ実行結果やログ監視およびアラート発報 ガイドラインでは下記機能はジョブマネージャー側で制御する方針
  5. 障害発生時のデータ整合性 リカバリ方式 概要 All or Nothing方式 全てのデータをロールバックしジョブを停止させる。 その後ジョブをリランすることで最初から処理をやり直す。 ジョブ停止方式 処理済みのデータは永続化させジョブを停止させる。

    その後ジョブをリランし未処理データを対象として処理する。 スキップ方式 処理済みのデータは永続化し、障害が起きたデータの処理をスキップする。 ジョブ実行終了後にジョブをリランし未処理データを対象として処理する。 ジョブ実行時に障害が発生した場合のリカバリ運用方式 この方式がベストである!という簡単な結論はない。 処理対象データの状態管理方針や要件によって選択肢は変わる!
  6. ガイドラインにおけるログ分類と出力方針 ログ種別 概要 出力方針 ジョブ実行ログ ジョブの起動・終了・稼働状況を通知す るログ。 ジョブ実行時に必ず出力する。 アプリログ 業務処理が出力するログ。

    100件単位など特定の件数を処理した タイミングで出力することを推奨する。 エラーログ ジョブ実行時に発生したエラー内容 (スタックトレース等)を出力するログ。 エラー発生時には必ず出力する。 SQLログ 実行したSQLの内容を出力するログ。 基本的に出力しない。 通信ログ 外部APIとの通信内容を出力するログ。 更新系API呼び出しのみ必ず出力する。 参照系API呼び出し時のログ出力は任意。
  7. ジョブの多重化 ジョブマネージャー、マルチスレッドジョブで実現する ただし、処理対象データについて処理実行の順序性がないこと、 各ジョブが同じデータを更新しないことが前提 ー マルチプロセス方式 マルチスレッド方式 概要 ジョブを異なるプロセスとして起動する方式。 ジョブネットとして定義する。

    多重化したい処理をマルチスレッドで実行する方 式。 メリット • ジョブ実装コストは通常ジョブと同じ • マルチスレッド方式よりも処理高速化の効果 が高い • 多重度は固定・可変の両方が選択可能。 • データ分割ジョブと多重化ジョブを統合する ことでジョブ間のデータ連携方式の考慮が不 要となる。 デメリット • 可変な多重度は設定できない(ただし、利用 するジョブマネージャの機能依存するため) • データ分割ジョブと多重化ジョブ間で処理対 象データなどを連携する必要がある。 • 多重度やスレッドセーフを意識した実装が必 要となるため実装コストが高い • 処理高速化の効果はマルチプロセス方式より も低い