by shigemk2

当面は技術的なことしか書かない

美しいバッチの壊し方 #cookpad_tech_kitchen

青木峰郎

  • 情報系(DWH)のSQLバッチ
  • 大量のデータをひたすら集計(一個一個はそんなに重くない)
  • ジョブ数が多くてフローが複雑 1000ジョブ
  • DWH 13000くらいが多いけど、1000は少ない
  • kuroko2 + bricolage

http://techlife.cookpad.com/entry/2015/06/27/154407

  • SQLバッチ専用フレームワーク(OSS)
  • 1ジョブ/1SQL文の強固な思想

    • よいバッチを作るために必要だから
  • 良いバッチ=運用しやすい

    • 落ちたときに如何に簡単に対処できるか
    • 運用がしにくくなるようであるなら運用を優先したい
    • 美しく壊れる 障害を直しやすい
  • 美しい壊れ方とは

    • どこで壊れたかすぐわかる
    • 続きから実行できる
    • リトライで直せる
  • cf

    • どこで壊れたか分からないプログラムは困る
    • バッチはだいたい長時間実行しているし、処理が複数別れている 9割がた終わってて、ジョブが失敗したら、せめて8割5分くらいのところから再開してほしい
    • ちょっとだけ直したらリトライしたい
  • 美しく壊すためのバッチ構築ルール

    • こういうふうに作れば美しくバッチを壊せる
    • 処理はひたすら細かく分割する
      • モノリシックな巨大ジョブは細かく砕く bricolage
    • I/O対象ごとにジョブ分割する
      • 中間テーブルが違うならジョブは分ける
  • ジョブ管理システムで統合
    • kuroko2を使う
    • 失敗したジョブはグラフィカルに確認したい
    • 細かくジョブを分けてるので再実行しやすい
  • べきとうバッチの記述
    • 1個1個のジョブをリトライ可能なようにする