makotan _at_ gmail dot com

ワークフローとバッチ処理の違い

最近非常に狭いエリアでワークフローで盛り上がったりしてたので判りにくいかなぁ〜って思った部分。
AWSに最近登場したData Piplineはバッチ処理、ちょっと前になぜかAWSの中の人が推してる?って状態だったのはSWFはワークフロー
この二つの明確な違いについて

ワークフローとバッチ処理がどう違うのか その1

  • バッチ処理は複数のデータをひとまとめに処理
  • ワークフローは一件ごとのデータを個別に処理

ここが一番大きな違い
なので、Data Piplineは一定時間毎に・・・みたいな記述だし
SWFはデータをきっかけに・・・みたいな感じになってる

ワークフローとバッチ処理がどう違うのか その2

  • バッチ処理は途中で止まらない
  • ワークフローは途中でユーザの反応を見るために止まる

これも大きな違い。
バッチ処理がエラー等で止まるなんて普通にある話だけど、それは駄目でしょ!ってなるので普通は止まらず最後まで行く前提

もし、バッチフレームワークでワークフローを作ったら・・・

  • データ毎にバッチを起動する
  • ユーザの反応を見るときにバッチを終了する
  • ユーザが反応すると新しいバッチを起動する

こんな感じでちょっと(だいぶ?)複雑な感じになる

もし、ワークフローエンジンでバッチ処理を作ったら・・・

  • 扱うデータの塊が時間になる
  • 開始タイミングを複数作れない
  • 本気のジョブフローを作ると結構高機能なエンジンが必要

こんな感じで本気のジョブフローで使うには大変。
Jenkinsから呼び出すのをワークフローエンジンで・・・ってのは意外と良いアイデアだと思った

結論

見た目は似てるけど向いてる先は違うぞ!!

ワークフロー バッチ ESB
ユーザの関与 有り 無し 無し
データの単位 個別 まとめて 個別